目录
- 前言 - Preface
- 致谢 - Acknowledgements
- 1 引言 - Introduction
- 1.1 监督学习 - Supervised learning
- 1.2 无监督学习 - Unsupervised learning
- 1.3 强化学习 - Reinforcement learning
- 1.4 伦理 - Ethics
- 1.5 本书结构 - Structure of book
- 1.6 其他书籍 - Other books
- 1.7 阅读本书的方法 - How to read this book
- 2 监督学习 - Supervised learning
- 2.1 监督学习概述 - Supervised learning overview
- 2.2 线性回归示例 - Linear regression examplew
- 2.3 总结 - Summary
- 3 浅层神经网络 - Shallow neural networks
- 3.1 神经网络示例 - Neural network example
- 3.2 通用逼近定理 - Universal approximation theorem
- 3.3 多变量输入和输出 - Multivariate inputs and outputs
- 3.4 浅层神经网络:一般情况 - Shallow neural networks: general case
- 3.5 术语 - Terminology
- 3.6 总结 - Summary
- 4 深度神经网络 - Deep neural networks
- 4.1 组合神经网络 - Composing neural networks
- 4.2 从组合网络到深度网络 - From composing networks to deep networks
- 4.3 深度神经网络 - Deep neural networks
- 4.4 矩阵表示 - Matrix notation
- 4.5 浅层 vs. 深度神经网络 - Shallow vs. deep neural networks
- 4.6 总结 - Summary
- 5 损失函数 - Loss functions
- 5.1 最大似然 - Maximum likelihood
- 5.2 构建损失函数的方法 - Recipe for constructing loss functions
- 5.3 示例1:单变量回归 - Example 1: univariate regression
- 5.4 示例2:二分类 - Example 2: binary classification
- 5.5 示例3:多类分类 - Example 3: multiclass classification
- 5.6 多输出 - Multiple outputs
- 5.7 交叉熵损失 - Cross-entropy loss
- 5.8 总结 - Summary
- 6 模型拟合 - Fitting models
- 6.1 梯度下降 - Gradient descent
- 6.2 随机梯度下降 - Stochastic gradient descent
- 6.3 动量 - Momentum
- 6.4 Adam
- 6.5 训练算法的超参数 - Training algorithm hyperparameters
- 6.6 总结 - Summary
- 7 梯度和初始化 - Gradients and initialization
- 7.1 问题定义 - Problem definitions
- 7.2 计算导数 - Computing derivatives
- 7.3 玩具示例 - Toy example
- 7.4 反向传播算法 - Backpropagation algorithm
- 7.5 参数初始化 - Parameter initialization
- 7.6 示例训练代码 - Example training code
- 7.7 总结 - Summary
- 8 性能评估 - Measuring performance
- 8.1 训练一个简单模型 - Training a simple model
- 8.2 错误的来源 - Sources of error
- 8.3 减少错误 - Reducing error
- 8.4 双下降 - Double descent
- 8.5 选择超参数 - Choosing hyperparameters
- 8.6 总结 - Summary
- 9 正则化 - Regularization
- 9.1 显式正则化 - Explicit regularization
- 9.2 隐式正则化 - Implicit regularization
- 9.3 提高性能的启发式方法 - Heuristics to improve performance
- 9.4 总结 - Summary
- 10 卷积网络 - Convolutional networks
- 10.1 不变性和等变性 - Invariance and equivariance
- 10.2 一维输入的卷积网络 - Convolutional networks for 1D inputs
- 10.3 二维输入的卷积网络 - Convolutional networks for 2D inputs
- 10.4 降采样和上采样 - Downsampling and upsampling
- 10.5 应用 - Applications
- 10.6 总结 - Summary
- 11 残差网络 - Residual networks
- 11.1 顺序处理 - Sequential processing
- 11.2 残差连接和残差块 - Residual connections and residual blocks
- 11.3 残差网络中的梯度爆炸 - Exploding gradients in residual networks
- 11.4 批归一化 - Batch normalization
- 11.5 常见的残差网络结构 - Common residual architectures
- 11.6 为什么带有残差连接的网络表现出色? - Why do nets with residual connections perform so well?
- 11.7 总结 - Summary
- 12 Transformer - Transformers
- 12.1 处理文本数据 - Processing text data
- 12.2 点积自注意力 - Dot-product self-attention
- 12.3 点积自注意力的扩展 - Extensions to dot-product self-attention
- 12.4 Transformer
- 12.5 用于自然语言处理的Transformer - Transformers for natural language processing
- 12.6 编码器模型示例:BERT - Encoder model example: BERT
- 12.7 解码器模型示例:GPT3 - Decoder model example: GPT3
- 12.8 编码器-解码器模型示例:机器翻译 - Encoder-decoder model example: machine translation
- 12.9 长序列的Transformer - Transformers for long sequences
- 12.10 图像的Transformer - Transformers for images
- 12.11 总结 - Summary
- 13 图神经网络 - Graph neural networks
- 13.1 图是什么? - What is a graph?
- 13.2 图表示 - Graph representation
- 13.3 图神经网络、任务和损失函数 - Graph neural networks, tasks, and loss functions
- 13.4 图卷积网络 - Graph convolutional networks
- 13.5 示例:图分类 - Example: graph classification
- 13.6 归纳 vs. 传导模型 - Inductive vs. transductive models
- 13.7 示例:节点分类 - Example: node classification
- 13.8 图卷积网络的层 - Layers for graph convolutional networks
- 13.9 边图 - Edge graphs
- 13.10 总结 - Summary
- 14 无监督学习 - Unsupervised learning
- 14.1 无监督学习模型的分类 - Taxonomy of unsupervised learning models
- 14.2 什么是好的生成模型? - What makes a good generative model?
- 14.3 量化性能 - Quantifying performance
- 14.4 总结 - Summary
- 15 生成对抗网络 - Generative Adversarial Networks
- 15.1 辨别作为信号 - Discrimination as a signal
- 15.2 提高稳定性 - Improving stability
- 15.3 渐进增长、小批量辨别和截断 - Progressive growing, minibatch discrimination, and truncation
- 15.4 条件生成 - Conditional generation
- 15.5 图像转换 - Image translation
- 15.6 StyleGAN
- 15.7 总结 - Summary
- 16 归一化流 - Normalizing flows
- 16.1 一维示例 - 1D example
- 16.2 一般情况 - General case
- 16.3 可逆网络层 - Invertible network layers
- 16.4 多尺度流 - Multi-scale flows
- 16.5 应用 - Applications
- 16.6 总结 - Summary
- 17 变分自编码器 - Variational autoencoders
- 17.1 潜变量模型 - Latent variable models
- 17.2 非线性潜变量模型 - Nonlinear latent variable model
- 17.3 训练 - Training
- 17.4 ELBO性质 - ELBO properties
- 17.5 变分近似 - Variational approximation
- 17.6 变分自编码器 - Variational autoencoder
- 17.7 重参数化技巧 - The reparameterization trick
- 17.8 应用 - Applications
- 17.9 总结 - Summary
- 18 扩散模型 - Diffusion models
- 18.1 概述 - Overview
- 18.2 编码器(正向过程) - Encoder (forward process)
- 18.3 解码器模型(反向过程) - Decoder model (reverse process)
- 18.4 训练 - Training
- 18.5 损失函数的重参数化 - Reparameterization of loss function
- 18.6 实现 - Implementation
- 18.7 总结 - Summary
- 19 强化学习 - Reinforcement learning
- 19.1 马尔可夫决策过程、回报和策略 - Markov decision processes, returns, and policies
- 19.2 期望回报 - Expected return
- 19.3 表格型强化学习 - Tabular reinforcement learning
- 19.4 拟合Q学习 - Fitted Q-learning
- 19.5 策略梯度方法 - Policy gradient methods
- 19.6 演员-评论家方法 - Actor-critic methods
- 19.7 离线强化学习 - Offline reinforcement learning
- 19.8 总结 - Summary
- 20 为什么深度学习有效? - Why does deep learning work?
- 20.1 反对深度学习的观点 - The case against deep learning
- 20.2 影响拟合性能的因素 - Factors that influence fitting performance
- 20.3 损失函数的特性 - Properties of loss functions
- 20.4 决定泛化的因素 - Factors that determine generalization
- 20.5 我们是否需要这么多参数? - Do we need so many parameters?
- 20.6 网络是否必须深层? - Do networks have to be deep?
- 20.7 总结 - Summary
- 21 深度学习与伦理 - Deep learning and ethics
- 21.1 价值对齐 - Value alignment
- 21.2 有意的滥用 - Intentional misuse
- 21.3 其他社会、伦理和专业问题 - Other social, ethical, and professional issues
- 21.4 案例研究 - Case study
- 21.5 科学的无价值理想 - The value-free ideal of science
- 21.6 负责任的AI研究作为集体行动问题 - Responsible AI research as a collective action problem
- 21.7 前进的方式 - Ways forward
- 21.8 总结 - Summary
- 附录A - 符号说明 - A Notation
- 附录B - 数学 - B Mathematics
- B.1 函数 - Functions
- B.2 二项式系数 - Binomial coefficients
- B.3 向量、矩阵和张量 - Vector, matrices, and tensors
- B.4 特殊类型的矩阵 - Special types of matrix
- B.5 矩阵微积分 - Matrix calculus
- 附录C - 概率 - C Probability
- C.1 随机变量和概率分布 - Random variables and probability distributions
- C.2 期望 - Expectation
- C.3 正态概率分布 - Normal probability distribution
- C.4 抽样 - Sampling
- C.5 概率分布之间的距离 - Distances between probability distributions
- 参考文献 - Bibliography
- 索引 - Index
前言
深度学习的历史在科学领域中是不寻常的。一小群科学家坚持不懈地工作了二十五年,研究一个看似没有前途的领域,最终彻底改变了一个学科,并对社会产生了巨大的影响。通常情况下,当研究人员探索一个晦涩难懂、看似不切实际的科学或工程领域时,它仍然只是晦涩难懂和不切实际。然而,这是一个显著的例外。尽管普遍存在怀疑,Yoshua Bengio、Geoffrey Hinton、Yann LeCun和其他人的系统努力最终取得了成功。
本书的标题是《理解深度学习》,以区别于那些涵盖编码和其他实际方面的书籍。本书主要讲述深度学习背后的思想。书的第一部分介绍了深度学习模型,并讨论了如何训练这些模型、衡量它们的性能以及改善性能。接下来的部分考虑了专门用于图像、文本和图形数据的体系结构。这些章节只需要基础的线性代数、微积分和概率知识,对于任何一位具备量化学科的大二本科生来说都是可理解的。书的后续部分涉及生成模型和强化学习。这些章节需要更多的概率和微积分知识,面向更高级的学生。
标题也有一定的玩笑成分——在撰写本书时,没有人真正理解深度学习。
致谢
在撰写本书过程中,没有以下各位的慷慨帮助和建议,本书将无法完成:Kathryn Hume、Kevin Murphy、Christopher Bishop、Peng Xu、Yann Dubois、Justin Domke、Chris Fletcher、Yanshuai Cao、Wendy Tay、Corey Toler-Franklin、Dmytro Mishkin、Guy McCusker、Daniel Worrall、Paul McIlroy、Roy Amoyal、Austin Anderson、Romero Barata de Morais、Gabriel Harrison、Peter Ball、Alf Muir、David Bryson、Vedika Parulkar、Patryk Lietzau、Jessica Nicholson、Alexa Huxley、Oisin Mac Aodha、Giuseppe Castiglione、Josh Akylbekov、Alex Gougoulaki、Joshua Omilabu、Alister Guenther、Joe Goodier、Logan Wade、Joshua Guenther、Kylan Tobin、Benedict Ellett、Jad Araj、Andrew Glennerster、Giorgos Sfikas、Diya Vibhakar、Sam Mansat-Bhattacharyya、Ben Ross、Ivor Simpson、Gaurang Aggarwal、Shakeel Sheikh、Jacob Horton、Felix Rammell、Sasha Luccioni、Akshil Patel、Alessandro Gentilini、Kevin Mercier、Krzysztof Lichocki、Chuck Krapf、Brian Ha、Chris Kang、Leonardo Viotti、Kai Li、Himan Abdollahpouri、Ari Pakman、Giuseppe Antonio Di Luna、Dan Oneat、Conrad Whiteley、Joseph Santarcangelo、Brad Shook、Gabriel Brostow、Lei He、Ali Satvaty、Romain Sabathé、Qiang Zhou、Prasanna Vigneswaran、Siqi Zheng、Stephan Grein、Jonas Klesen、Giovanni Stilo、Huang Bokai、Kevin McGuinness、Qiang Sun、Zakaria Lotfi、Yifei Lin、Sylvain Bouix、Alex Pitt、Stephane Chretien、Robin Liu、Bian Li、Adam Jones、Marcin Świerkot、Tommy Löfstedt、Eugen Hotaj、Fernando Flores-Mangas、Tony Polichroniadis、Pietro Monticone、Rohan Deepak Ajwani、Menashe Yarden Einy、Robert Gevorgyan、Thilo Stadelmann、Gui JieMiao、Botao Zhu、Mohamed Elabbas、Satya Krishna Gorti、James Elder、Helio Perroni Filho、Xiaochao Qu、Jaekang Shin、Joshua Evans、Robert Dobson、Shibo Wang、Edoardo Zorzi、Stanisław Jastrzębski、Pieris Kalligeros、Matt Hewitt、Zvika Haramaty、Ted Mavroidis、Nikolaj Kuntner、Amir Yorav、Masoud Mokhtari、Xavier Gabaix、Marco Garosi、Vincent Schönbach、Avishek Mondal、Victor S.C. Lui、Sumit Bhatia、Julian Asilis、Hengchao Chen、Siavash Khallaghi、Csaba Szepesvári、Mike Singer、Mykhailo Shvets、Abdalla Ibrahim、Stefan Hell、Ron Raphaeli、Diogo Tavares、Aristotelis Siozopoulos、Jianrui Wu、Jannik Münz、Penn Mackintosh、Shawn Hoareau、Qianang Zhou、Emma Li、Charlie Groves、Xiang Lingxiao、Trivikram Muralidharan、Rajat Binaykiya、Germán del Cacho Salvador、Alexey Bloudov、Paul Colognese、Bo Yang、Jani Monoses和Adenilson Arcanjo,以及Julius Aka。
我特别感谢Daniyar Turmukhambetov、Amedeo Buonanno、Andrea Panizza、Mark Hudson和Bernhard Pfahringer,他们对本书多个章节提供了详细的评论。我要特别感谢Andrew Fitzgibbon、Konstantinos Derpanis和Tyler Mills,他们阅读了整本书,并且他们的热情帮助我完成了这个项目。我还要感谢Neill Campbell和Özgür Şimşek,在他们的邀请下,我在巴斯大学进行了一门基于本书内容的课程。最后,我非常感谢我的编辑Elizabeth Swayze,在整个过程中给予我坦诚的建议。
第12章(transformers)和第17章(变分自编码器)最初作为Borealis AI的博客发布,并经过了皇家加拿大银行和Borealis AI的许可进行了适应性修改。我对他们在这个努力中的支持表示感谢。第16章(正规化流)基于Kobyzev等人的综述文章 (2020),我是该文章的合著者之一。我非常幸运能够与来自达尔豪斯大学的Travis LaCroix合作撰写第21章,他非常容易相处,合作愉快,并且他做了大部分的工作。
第1章 引言 - Introduction
人工智能(Artificial Intelligence,简称AI)涉及构建模拟智能行为的系统。它包括广泛的方法,包括基于逻辑、搜索和概率推理的方法。机器学习是AI的一个子领域,它通过将数学模型拟合到观测数据中来学习做出决策。这个领域经历了爆炸性的增长,现在(不正确地)几乎与AI这个术语同义。
深度神经网络是一种机器学习模型,当它被拟合到数据中时,被称为深度学习。在撰写本书时,深度网络是最强大和实用的机器学习模型,我们在日常生活中经常遇到它们。使用自然语言处理算法翻译其他语言的文本,使用计算机视觉系统搜索特定对象的图片,或者通过语音识别界面与数字助理交流,这些应用都是由深度学习驱动的。
正如标题所示,本书旨在帮助刚接触这个领域的读者理解深度学习的原理。本书既不是过分理论化的(没有证明),也不是极其实践性的(几乎没有代码)。目标是解释其中的基本思想;读者在阅读本书后将能够将深度学习应用于新颖的情境中,而这些情境中没有现成的成功方法。
机器学习方法可以粗略地分为三个领域:监督学习、无监督学习和强化学习。在撰写本书时,这三个领域的前沿方法都依赖于深度学习(图1.1)。本章简要描述了这三个领域,并且此分类方法也在本书的组织结构上得到了松散的体现。无论我们喜欢与否,深度学习都将改变我们的世界,而这种改变并非都是积极的。因此,本章还包含了关于AI伦理的简要介绍。最后,我们给出了如何充分利用本书的建议。
1.1 监督学习 - Supervised learning
监督学习模型定义了从输入数据到输出预测的映射关系。在接下来的章节中,我们将讨论输入、输出、模型本身以及“学习”模型的含义。

图1.1 机器学习是人工智能的一个领域,它将数学模型拟合到观测数据中。它可以粗略地分为监督学习、无监督学习和强化学习。深度神经网络对这些领域都有贡献。
1.1.1 回归和分类问题 - Regression and classification problems
图1.2描述了几个回归和分类问题。在每种情况下,都有一个有意义的现实世界输入(句子、声音文件、图像等),并将其编码为一个数字向量。这个向量形成了模型的输入。模型将输入映射到一个输出向量,然后将其“翻译”回一个有意义的现实世界预测。目前,我们关注输入和输出,并将模型视为一个黑盒子,它接收一个数字向量并返回另一个数字向量。
图1.2a中的模型根据输入特征(如面积和卧室数量)预测房屋的价格。这是一个回归问题,因为模型返回一个连续的数值(而不是分类结果)。相比之下,图1.2b中的模型以分子的化学结构作为输入,并预测其熔点和沸点。这是一个多变量回归问题,因为它预测多个数值。
图1.2c中的模型接收一个包含餐厅评论的文本字符串作为输入,并预测评论是积极的还是消极的。这是一个二分类问题,因为模型试图将输入分配给两个类别之一。输出向量包含输入属于每个类别的概率。图1.2d和1.2e描述了多类分类问题。在这种情况下,模型将输入分配给N > 2个类别之一。在第一种情况下,输入是一个音频文件,模型预测它包含的音乐流派。在第二种情况下,输入是一张图像,模型预测它包含的物体是什么。在每种情况下,模型返回一个大小为N的向量,其中包含N个类别的概率。
1.1.2 输入 - Inputs
图1.2中的输入数据变化很大。在房屋定价示例中,输入是一个包含描述房产特征的固定长度向量。这是一个表格数据的例子,因为它没有内部结构;如果我们改变输入的顺序并构建一个新模型,我们期望模型的预测结果保持不变。
相反,在餐厅评论的例子中,输入是一段文本。这取决于评论中的单词数量,可能是可变长度的,并且输入的顺序很重要;“我妻子吃了鸡肉”和“鸡肉吃了我妻子”是不同的。在将文本传递给模型之前,必须将其编码为数字形式。在这里,我们使用一个大小为10,000的固定词汇表,并简单地连接单词索引。

图1.2 回归和分类问题。
- a) 这个回归模型接收描述房产特征的数字向量,并预测其价格。
- b) 这个多变量回归模型接收化学分子的结构,并预测其熔点和沸点。
- c) 这个二分类模型接收餐厅评论,并将其分类为积极或消极。
- d) 这个多类分类问题将音频片段分配给N个流派之一。
- e) 第二个多类分类问题,模型根据可能包含的N个对象之一对图像进行分类。

图1.3 机器学习模型。该模型表示了将输入(儿童年龄)与输出(儿童身高)相关联的一系列关系。特定的关系是使用训练数据选择的,训练数据由输入/输出对(橙色点)组成。当我们训练模型时,我们在可能的关系中搜索一个能够很好地描述数据的关系。在这里,训练好的模型是青色曲线,可以用于计算任何年龄对应的身高。
对于音乐分类的例子,输入向量可能是固定大小的(例如10秒的片段),但是非常高维。数字音频通常以44.1 kHz采样,并由16位整数表示,因此十秒的片段由441,000个整数组成。显然,监督学习模型必须能够处理可观的输入。图像分类示例中的输入(由每个像素处的RGB值连接而成)也是巨大的。此外,它的结构自然是二维的;即使两个像素在输入向量中不相邻,它们仍然密切相关,因为它们在垂直方向上彼此相邻。
最后,考虑预测分子的熔点和沸点的模型的输入。分子可能包含不同数量的原子,这些原子可以以不同的方式连接。在这种情况下,模型必须将分子的几何结构和组成原子输入到模型中。
1.1.3 机器学习模型 - Machine learning models
到目前为止,我们将机器学习模型视为一个黑盒子,它接收一个输入向量并返回一个输出向量。但是这个黑盒子里到底有什么呢?考虑一个从儿童年龄预测身高的模型(图1.3)。机器学习模型是一个数学方程,描述了平均身高如何随年龄变化(图1.3中的青色曲线)。当我们将年龄输入到这个方程中时,它会返回身高。例如,如果年龄是10岁,那么我们预测身高将是139厘米。
更准确地说,这个模型表示了一族将输入映射到输出的方程(即一族不同的青色曲线)。通过使用训练数据(输入/输出对的示例),选择特定的方程(曲线)。在图1.3中,这些对由橙色点表示,我们可以看到模型(青色曲线)合理地描述了这些数据。当我们谈论训练或拟合模型时,我们的意思是在可能的方程(可能的青色曲线)中搜索,以找到最准确描述训练数据的方程。
由此可见,图1.2中的模型需要带标签的输入/输出对进行训练。例如,音乐分类模型需要大量的音频剪辑,其中人类专家已经确定了每个剪辑的流派。这些输入/输出对在训练过程中扮演了教师或监督者的角色,这就产生了“监督学习”的术语。
1.1.4 深度神经网络 - Deep neural networks
本书涉及的是深度神经网络,它是一种特别有用的机器学习模型。它是一种方程,可以表示输入和输出之间极其广泛的关系族,而且在这个关系族中搜索描述训练数据的关系特别容易。
深度神经网络可以处理非常大且长度可变的输入,以及包含各种内部结构的输入。它们可以输出单个实数(回归),多个实数(多元回归)或两个或更多类别的概率(二分类和多类分类)。正如我们将在下一节中看到的,它们的输出也可以是非常大且长度可变的,且包含内部结构。可能很难想象具有这些属性的方程,读者应该暂时搁置怀疑。
1.1.5 结构化输出 - Structured outputs
图1.4a描述了一个用于语义分割的多变量二分类模型。在这里,输入图像的每个像素被分配一个二进制标签,指示它是否属于牛或背景。图1.4b显示了一个多变量回归模型,其中输入是一个街景图像,输出是每个像素的深度。在这两种情况下,输出是高维且具有结构。然而,这种结构与输入密切相关,这可以被利用;如果一个像素被标记为“牛”,那么具有类似RGB值的相邻像素很可能具有相同的标签。
图1.4c-e描述了三个模型,输出具有复杂的结构,但与输入不太相关。图1.4c展示了一个音频转录模型,它将音频样本映射到音频中的口述文字。图1.4d是一个翻译模型,其中输入是英文文本,输出包含其法语翻译。图1.4e描述了一个非常具有挑战性的任务,其中输入是描述性文本,模型必须生成与该描述相匹配的图像。

图1.4 具有结构化输出的监督学习任务。
- a) 这个语义分割模型将RGB图像映射到二进制图像,指示每个像素属于背景还是牛(改编自Noh等人,2015年)。
- b) 这个单目深度估计模型将RGB图像映射到每个像素表示深度的输出图像(改编自Cordts等人,2016年)。
- c) 这个音频转录模型将音频样本映射到音频中的口述文字。
- d) 这个翻译模型将英文文本字符串映射到其法语翻译。
- e) 这个图像合成模型将一个标题映射到一张图像(示例来自https://openai.com/dall-e-2/)。 在每种情况下,输出具有复杂的内部结构或语法。在某些情况下,许多输出与输入兼容。
原则上,后三个任务可以在标准的监督学习框架下解决,但由于两个原因,它们更加困难。首先,输出可能真的是有歧义的;从英文句子到法文句子有多种有效的翻译,任何标题都与任何图像兼容。其次,输出包含相当多的结构;并非所有的单词字符串都是有效的英文和法文句子,也不是所有的RGB值集合都是合理的图像。除了学习映射之外,我们还必须尊重输出的“语法”。
幸运的是,可以在不需要输出标签的情况下学习这种“语法”。例如,我们可以通过学习大量文本数据的统计信息来学习如何构成有效的英文句子。这与本书的下一节关联,下一节将考虑无监督学习模型。
1.2 无监督学习 - Unsupervised learning
在没有相应输出标签的情况下,从输入数据构建模型被称为无监督学习;缺少输出标签意味着没有“监督”。与学习从输入到输出的映射不同,目标是描述或理解数据的结构。与监督学习一样,数据可能具有非常不同的特征;它可能是离散的或连续的,低维的或高维的,长度恒定的或可变的。
1.2.1 生成模型 - Generative models
本书关注生成式无监督模型,它们学习合成与训练数据在统计上无法区分的新数据示例。一些生成模型明确描述了输入数据上的概率分布,在这种情况下,新示例是通过从该分布中进行采样生成的。其他模型仅学习生成新示例的机制,而不明确描述其分布。
最先进的生成模型可以合成非常逼真但与训练示例不同的示例。它们在生成图像(图1.5)和文本(图1.6)方面取得了特别成功。它们还可以在某些输出预先确定的约束下合成数据(称为条件生成)。例如,图像修复(图1.7)和文本补全(图1.8)。事实上,现代文本生成模型非常强大,以至于它们可以显得智能。在给定一段文本和一个问题之后,模型通常可以通过生成最可能的文档补全来“填补”缺失的答案。然而,实际上,模型只了解语言的统计信息,并不理解其答案的意义。

图1.5 图像的生成模型。左侧:两个图像是从一个训练于猫图片的模型生成的。这些不是真实的猫,而是从概率模型中采样得到的样本。右侧:两个图像是从一个训练于建筑图像的模型生成的。改编自Karras等人,2020年。

图1.6 从文本数据的生成模型合成的短篇小说。该模型描述了一个概率分布,为每个输出字符串分配概率。从模型中采样会生成遵循训练数据(这里是短篇小说)统计的字符串,但以前从未见过。

图1.7 图像修复。在原始图像中(左侧),男孩被金属电缆遮挡。这些不受欢迎的区域(中间)被去除,然后生成模型在剩余像素保持不变的约束下合成新图像(右侧)。改编自Saharia等人,2022年。

图1.8 条件文本合成。给定一段初始文本(黑色部分),文本的生成模型可以通过合成“缺失”的剩余部分来合理地延续字符串。由GPT3生成(Brown等人,2020年)。

图1.9 人脸的变化。人脸大约有42块肌肉,因此可以用仅有的42个数字来描述同一人在相同光照下的图像变化。通常情况下,图像、音乐和文本数据集可以用相对较少的潜在变量来描述,尽管将这些变量与特定的物理机制联系起来通常更加困难。来自Dynamic FACES数据库的图像(Holland等人,2019年)。
1.2.2 潜在变量 - Latent variables
一些(但不是全部)生成模型利用了数据可能比观察到的变量的原始数量更低维的观察。例如,有效和有意义的英语句子的数量远远小于通过随机抽取单词创建的字符串的数量。同样,真实世界的图像只是可以通过为每个像素随机抽取RGB值来创建的图像的一个小子集。这是因为图像是通过物理过程生成的(见图1.9)。
这导致了一个想法,即我们可以使用较少的潜在变量来描述每个数据示例。在这里,深度学习的作用是描述这些潜在变量与数据之间的映射关系。潜在变量通常通过设计具有简单的概率分布。通过从该分布中进行采样并将结果传递给深度学习模型,我们可以创建新的样本(图1.10)。

图1.10 潜在变量。许多生成模型使用深度学习模型描述低维“潜在”变量与观察到的高维数据之间的关系。潜在变量通过设计具有简单的概率分布。因此,可以通过从潜在变量的简单分布中进行采样,然后使用深度学习模型将样本映射到观察到的数据空间来生成新的示例。
图1.11 图像插值。每一行中,左侧和右侧的图像是真实的,中间的三个图像表示由生成模型创建的插值序列。支持这些插值的生成模型已经学会了所有图像都可以由一组潜在变量生成。通过找到这些变量的两个真实图像的值,插值它们的值,然后使用这些中间变量创建新的图像,我们可以生成既视觉上合理又混合了两个原始图像特征的中间结果。改编自Sauer等人,2022年和Ramesh等人,2022年。
图1.12 从标题“时代广场上的一个滑板上的泰迪熊”生成的多个图像。由DALL·E-2生成(Ramesh等人,2022年)。
这些模型为操作真实数据的新方法提供了可能。例如,考虑找到支持两个真实示例的潜在变量。我们可以通过在潜在表示之间进行插值,并将中间位置映射回数据空间来在这些示例之间进行插值(图1.11)。
1.2.3 连接监督学习和无监督学习 - Connecting supervised and unsupervised learning
具有潜在变量的生成模型也可以为具有结构化输出的监督学习模型提供帮助(图1.4)。例如,考虑学习预测与标题相对应的图像。我们可以学习解释文本的潜在变量和解释图像的潜在变量之间的关系,而不是直接将文本输入映射到图像。
这有三个优点。首先,由于输入和输出的维度较低,我们可能需要更少的文本/图像对来学习这种映射。其次,我们更有可能生成看起来合理的图像;任何合理的潜在变量值都应该产生看起来像一个合理示例的东西。第三,如果我们在两组潜在变量之间或从潜在变量到图像的映射中引入随机性,那么我们可以生成多个图像,所有这些图像都可以很好地由标题描述(图1.12)。
1.3 强化学习 - Reinforcement learning
机器学习的最后一个领域是强化学习。这种范式引入了一个在世界中生活并可以在每个时间步骤执行特定动作的代理(agent)的概念。这些动作会改变系统的状态,但不一定是确定性的。采取一个动作也可能产生奖励,强化学习的目标是让代理学会选择平均上能够获得高奖励的动作。
一个复杂之处在于,奖励可能在采取动作之后的一段时间内发生,因此将奖励与动作关联起来并不简单。这被称为时间性奖励分配问题。随着代理的学习,它必须在已知的知识之间权衡探索和利用;也许代理已经学会了如何获得适度的奖励;它应该遵循这个策略(利用已知的知识),还是应该尝试不同的动作以查看是否可以改进(探索其他机会)?
1.3.1 两个例子 - Two examples
考虑教授一个人形机器人行走。机器人在给定时间内可以执行有限数量的动作(移动各个关节),这些动作会改变世界的状态(机器人的姿势)。我们可能会奖励机器人在障碍赛道中达到检查点。为了到达每个检查点,它必须执行许多动作,而当奖励到来时,哪些动作对奖励的贡献不明确,哪些是无关紧要的。这是一个时间性奖励分配问题的例子。
第二个例子是学习下棋。同样,代理在任何给定时间都有一组有效的动作(棋步)。然而,这些动作以非确定性的方式改变系统的状态;对于任何动作的选择,对手可能会以许多不同的着法作出回应。在这里,我们可以基于吃子来建立奖励结构,或者只在游戏结束时给出一个奖励来表示胜利。在后一种情况下,时间性奖励分配问题非常严重;系统必须学会哪些着法对于成功或失败是关键的。
在这两个例子中,探索和利用的权衡也是显而易见的。机器人可能已经发现通过侧躺并用一条腿推动可以取得进展。这种策略可以移动机器人并获得奖励,但速度比最佳解决方案(保持平衡并行走)慢得多。因此,它面临着利用已知知识(如如何笨拙地沿地板滑动)和探索动作空间(可能导致更快的行走)之间的选择。类似地,在下棋的例子中,代理可能会学习一系列合理的开局着法。它应该利用这个知识还是尝试不同的开局着法?
深度学习如何适用于强化学习框架可能并不明显。有几种可能的方法,但其中一种技术是使用深度网络构建从观察到的世界状态到动作的映射。这被称为策略网络。在机器人的例子中,策略网络将学习从传感器测量到关节运动的映射。在下棋的例子中,网络将学习从当前棋盘状态到着法选择的映射(图1.13)。

图1.13 强化学习的策略网络。将深度神经网络应用于强化学习的一种方法是使用它们来定义从状态(如棋盘上的位置)到动作(可能的移动)的映射。这种映射被称为 策略。改编自Pablok (2017)。
1.4 伦理道德 - Ethics
在不讨论人工智能的伦理影响将是不负责任的情况下,撰写本书。这项强大的技术将至少与电力、内燃机、晶体管或互联网一样,改变世界的程度。在医疗保健、设计、娱乐、交通、教育和几乎所有商业领域中,其潜在的益处是巨大的。然而,科学家和工程师往往对他们工作的结果过于乐观,潜在的危害同样巨大。以下几段重点讨论了五个关切点。
偏见和公正性: 如果我们根据历史数据训练一个系统来预测个人的薪水水平,那么这个系统将重现历史上的偏见;例如,它可能会预测女性应该比男性获得较低的薪水。类似的情况已经成为国际新闻:一个用于超分辨率处理面部图像的AI系统使非白人看起来更白;一个生成图像的系统在被要求合成律师的图片时只生成男性的照片。对使用人工智能进行算法决策的粗心应用可能会巩固或加剧现有的偏见。详细讨论请参见Binns (2018)。
可解释性: 深度学习系统做出决策,但我们通常不知道具体是如何以及基于什么信息做出的决策。它们可能包含数十亿个参数,我们无法通过检查来理解它们的工作方式。这导致了可解释性人工智能的子领域。一个相对成功的领域是产生局部解释;我们无法解释整个系统,但我们可以提供一个可解释的描述,说明为什么做出了特定的决策。然而,目前还不清楚是否可能构建复杂的决策系统,使其对用户甚至创建者完全透明。详细信息请参见Grennan等人 (2022)。
将AI用于武器化: 所有重要的技术都直接或间接地应用于战争。可悲的是,暴力冲突似乎是人类行为中不可避免的特征。人工智能可以说是有史以来最强大的技术,无疑将在军事背景下广泛部署。事实上,这已经在发生中(参见Heikkilä, 2022))。
权力集中: 世界上最强大的公司之所以大量投资于人工智能,并不是出于改善人类命运的善意。他们知道这些技术将使他们获得巨额利润。与任何先进技术一样,深度学习很可能将权力集中在少数控制它的组织手中。自动化目前由人类执行的工作将改变经济环境,并对收入较低、技能较少的工人的生计产生不成比例的影响。乐观主义者认为,类似的中断在工业革命期间发生过,并导致工作时间缩短。事实是,我们根本不知道大规模采用人工智能对社会产生什么样的影响(参见David, 2015)。
存在风险: 人类面临的主要存在风险都源自技术。气候变化是工业化的结果。核武器源于对物理学的研究。由于交通、农业和建筑方面的创新,流行病更有可能发生并传播得更快,因为这些创新使得人口更大、更密集、更互联。人工智能带来了新的存在风险。我们在构建比人类更强大和可扩展的系统时应该非常谨慎。在最乐观的情况下,它将使所有权力掌握在所有者手中。在最悲观的情况下,我们将无法控制它,甚至无法理解它的动机(参见Tegmark, 2018)。
这个列表远非详尽无遗。人工智能还可能促使监视、虚假信息、侵犯隐私、欺诈和操纵金融市场,并且训练人工智能系统所需的能源会导致气候变化。此外,这些关切不是臆测的;已经有许多伦理可疑的人工智能应用的例子(参考Dao, 2021))。此外,互联网的最近历史表明,新技术可能以意想不到的方式造成伤害。八十年代和九十年代的在线社区几乎无法预测到虚假新闻、垃圾邮件、在线骚扰、欺诈、网络霸凌、绝望文化、政治操纵、揭露个人隐私、在线激进化和报复色情的泛滥。
每个研究人员(或撰写关于)人工智能的人都应该考虑科学家在使用其技术方面的责任程度。我们应该考虑到资本主义主要推动了人工智能的发展,法律进步和社会利益的部署可能会滞后很大。我们应该思考作为科学家和工程师,是否能够控制该领域的进展并减少潜在的危害。我们应该考虑我们愿意为哪种类型的组织工作。他们在减少人工智能潜在危害方面有多认真?他们只是在进行“伦理洗白”以减少声誉风险,还是真正采取措施阻止伦理可疑的项目?
鼓励所有读者进一步研究这些问题。https://ethics-of-ai.mooc.fi/ 是一个有用的入门资源。如果您是使用本书授课的教授,请与您的学生讨论这些问题。如果您是参加课程但未进行这样的讨论的学生,请游说您的教授进行讨论。如果您在企业环境中部署或研究人工智能,则鼓励您审查雇主的价值观,并在有需要的情况下帮助改变它们(或离开)。
1.5 书籍结构 - Structure of book
本书的结构遵循本介绍的结构。第2至9章介绍了监督学习的流程。我们描述了浅层和深度神经网络,并讨论了如何训练它们、衡量和改善它们的性能。第10至13章介绍了深度神经网络的常见架构变体,包括卷积网络、残差连接和Transformer。这些架构在监督、无监督和强化学习中都得到了应用。
第14至18章介绍了使用深度神经网络进行无监督学习。我们分别专门讨论了四种现代深度生成模型:生成对抗网络、变分自编码器、归一化流和扩散模型。第19章是关于深度强化学习的简要介绍。这是一个容易成为一本单独书籍的主题,因此对它的处理必然是肤浅的。然而,这个处理旨在为对这个领域不熟悉的读者提供一个良好的起点。
尽管本书的标题是“深度学习”,但对于深度学习的某些方面,我们仍然了解甚少。第20章提出了一些基本问题。为什么深度网络如此容易训练?为什么它们具有良好的泛化能力?为什么它们需要这么多参数?它们需要是深度的吗?在探索过程中,我们会探讨一些意想不到的现象,如损失函数的结构、双重下降、理解和中彩票效应。本书以第21章讨论伦理和深度学习结束。
1.6 其他书籍 - Other books
本书是一本独立的书籍,但仅涵盖了深度学习的内容。它旨在成为《深度学习》(Goodfellow等人,2016年)的精神继承者,后者是一本非常出色的资源,但不包括最新的进展。对于更广泛的机器学习内容,最新和全面的资源是《概率机器学习》(Murphy,2022年,2023年)。然而,《模式识别与机器学习》(Bishop,2006年)仍然是一本优秀而相关的书籍。
如果您喜欢本书,那么我的前一本著作《计算机视觉:模型、学习和推理》(Prince,2012年)仍然值得一读。其中的一些部分已经过时,但它包含了对概率的全面介绍,包括贝叶斯方法,以及对潜在变量模型、计算机视觉的几何、高斯过程和图形模型的入门性覆盖。它使用与本书相同的符号约定,并且可以在网上找到。关于图形模型的详细讨论可以在《概率图模型:原理和技术》(Koller和Friedman,2009年)中找到,而《高斯过程用于机器学习》(Williams和Rasmussen,2006年)则涵盖了高斯过程。
有关背景数学知识,请参考《机器学习的数学基础》(Deisenroth等,2020年)。如果您更倾向于以编码为导向的方法,请参考《深度学习动手学》(Zhang等,2023年)。计算机视觉的最佳概述是Szeliski(2022年),还有即将出版的书籍《计算机视觉基础》(Torralba等,2024年)。了解图神经网络的良好起点是《图表示学习》(Hamilton,2020年)。关于强化学习的权威著作是《强化学习导论》(Sutton和Barto,2018年)。初学者的良好资源是《深度强化学习基础》(Graesser和Keng,2019年)。
1.7 如何阅读本书 - How to read this book
本书中的大多数章节包含正文、注释部分和一系列问题。正文部分旨在自成体系,可以独立阅读,无需参考章节的其他部分。尽可能地,背景数学知识已融入到正文中。然而,对于那些可能分散主线论证的更大主题,背景材料被放在附录中,并在页边提供了参考。本书中的大部分符号遵循标准符号约定。然而,有些约定的使用较少,建议读者在继续阅读之前参考附录A。
正文部分包括许多深度学习模型和结果的新颖插图和可视化。我努力提供对现有思想的新解释,而不仅仅是整理他人的工作。深度学习是一个新兴领域,有时现象的理解还不够透彻。我会明确指出这种情况,并在需要谨慎对待我的解释时进行说明。
参考文献仅在正文中描绘结果时才会包含。相反,它们可以在章节末尾的注释部分找到。在正文中,我通常不会遵循历史先例;如果当前技术的祖先不再有用,我就不会提及它。然而,注释部分描述了该领域的历史发展,并希望公平地给予相关的认可。注释按段落组织,提供了进一步阅读的指引。它们应该帮助读者在子领域内定位自己,并理解它与机器学习其他部分的关系。注释的自包含性不如主文本。根据您的背景知识和兴趣水平,您可能会发现这些部分更或者不那么有用。
每章都有一些相关问题。在正文的相应位置,会在页边标注应尝试解决这些问题的时间点。正如George Pólya所说:“数学,你看,不是一项旁观者运动。”他是正确的,我强烈建议您在阅读过程中尝试解决这些问题。在某些情况下,这些问题提供的见解将帮助您理解主要内容。在相关网站上提供答案的问题将用星号标注。此外,还可以通过网站获取帮助您理解本书中的思想的Python笔记本,并且这些也会在正文的页边引用。事实上,如果您感到生疏,现在就通过背景数学的笔记本开始工作可能会很有价值。
不幸的是,人工智能领域的研究速度使得本书不可避免地成为一个持续不断的工作。如果您发现有些部分难以理解,有明显遗漏或似乎是多余的部分,请通过相关网站与我联系。我们可以共同使下一版变得更好。
第3章 浅层神经网络 - Shallow neural networks
第2章介绍了使用一维线性回归的监督学习。然而,这个模型只能将输入/输出关系描述为一条直线。本章介绍浅层神经网络。这些网络可以描述分段线性函数,并且足够表达多维输入和输出之间任意复杂的关系。
3.1 神经网络示例 - Neural network example
浅层神经网络是具有参数
我们可以将这个计算分解为三个部分:
- 首先,我们计算输入数据的三个线性函数
。 - 其次,我们将这三个函数的结果传递入一个激活函数
。 - 最后,我们用
、 和 加权这三个得到的激活值,将它们相加,并加上一个偏移量 。
为了完整地描述,我们需要定义激活函数
当输入为正时,它返回输入值,否则返回零(图3.1)。
在函数3.1中,输入/输出的关系很可能表示得不是很明显。
很显然,方程3.1所表示的输入/输出关系集合并不明显。然而,前一章的思想仍然适用。方程3.1代表了一个函数集合,其中具体的成员取决于参数向量

图3.1 修正线性单元(ReLU)。这个激活函数在输入小于零时返回零,在输入大于等于零时返回输入值。换句话说,它将负值截断为零。注意,还有许多其他可能的激活函数选择(见图3.13),但ReLU是最常用和最容易理解的。

图3.2 方程3.1.定义的函数集合。a–c)三种不同参数
的十个选择的函数。在每种情况下,输入/输出关系是分段线性的。然而,连接点的位置、线性区域之间的斜率和整体高度是不同的。
3.1.1 神经网络直观理解 - Neural network intuition
实际上,方程3.1表示了一个具有最多四个线性区域的连续分段线性函数的集合(图3.2)。我们现在将方程3.1分解,并展示它描述这个函数集合的原因。为了更容易理解,我们将函数分为两部分。首先,我们引入中间量:
其中,我们将
图3.3显示了创建图3.2a中的函数的计算流程。每个隐藏单元包含一个输入的线性函数
图3.3j中的每个线性区域对应于隐藏单元中的不同激活模式。当一个单元被截断时,我们称之为“非活跃”,当一个单元没有被截断时,我们称之为“活跃”。例如,阴影区域接收到
每个隐藏单元对函数贡献一个“连接点”,因此在三个隐藏单元的情况下,可以有四个线性区域。然而,这些区域的斜率中只有三个是独立的;第四个斜率要么为零(如果所有隐藏单元在该区域中都是非活跃的),要么是来自其他区域的斜率之和。

图3.3 图3.2a中函数的计算过程。
- a–c ) 输入
经过三个具有不同y截距 和斜率 的线性函数。 - d–f ) 每条线通过ReLU激活函数,将负值截断为零。
- g–i ) 三条被截断的线分别由
、 和 加权(缩放)。 - j ) 最后,被截断和加权的函数求和,并添加一个控制高度的偏移量
。 四个线性区域中的每一个对应于隐藏单元中的不同激活模式。在阴影区域中, 是非活跃的(被截断),但 和 都是活跃的。
在本书中,线性函数的形式为
。任何其他类型的函数都是非线性的。例如,ReLU函数(方程3.2)和包含它的示例神经网络(方程3.1)都是非线性的。有关进一步澄清,请参见本章末尾的注释。
3.1.2 描绘神经网络 - Depicting neural networks
我们一直在讨论一个具有一个输入、一个输出和三个隐藏单元的神经网络。我们在图3.4a中可视化了这个网络。输入在左侧,隐藏单元在中间,输出在右侧。每个连接代表十个参数之一。为了简化这个表示,我们通常不绘制截距参数,因此这个网络通常被描绘为图3.4b中的样子。

图3.4 描绘神经网络。
- a) 输入
在左侧,隐藏单元 、 和 在中间,输出 在右侧。计算从左到右进行。输入用于计算隐藏单元,然后将它们组合以创建输出。每个箭头代表一个参数(橙色为截距,黑色为斜率)。每个参数将乘以对应的源函数,并将把结果添加到目标值中。例如,我们将参数 乘以源函数 并将其加到 上。我们引入的节点(橙色圆圈)将偏移量纳入此方案里,因此我们将参数 乘以1(没有影响)并将其加到 上 。ReLU函数应用于隐藏单元。 - b) 更常见的做法是省略截距、ReLU函数和参数名称;这种更简单的表示方法代表了相同的网络。
3.2 通用逼近定理 - Universal approximation theorem
在前一节中,我们介绍了一个具有一个输入、一个输出、ReLU激活函数和三个隐藏单元的示例神经网络。现在让我们稍微推广一下,考虑具有
并且这些隐藏单元线性组合以创建输出:
浅层网络中隐藏单元的数量是网络容量的度量。使用ReLU激活函数,具有
事实上,具有足够容量(隐藏单元)的浅层网络可以以任意精度描述定义在实数线的紧致子集上的任何连续

图3.5 通过分段线性模型逼近1D函数(虚线)。
- a-c) 随着区域数量的增加,模型越来越接近连续函数。具有标量输入的神经网络为每个隐藏单元创建一个额外的线性区域。通用逼近定理证明,具有足够隐藏单元的浅层神经网络可以以任意指定精度描述定义在
的紧致子集上的任何给定连续函数。
3.3 多变量输入和输出 - Multivariate inputs and outputs
在上面的例子中,网络具有单个标量输入
3.3.1 可视化多变量输出 - Visualizing multivariate outputs
要将网络扩展到多变量输出
和

图3.6 具有一个输入、四个隐藏单元和两个输出的网络。
- a) 网络结构的可视化。
- b) 该网络产生两个分段线性函数
和 。这些函数的四个“连接点”(在垂直虚线处)被限制在相同的位置,因为它们共享相同的隐藏单元,但斜率和整体高度可能不同。

图3.7 具有
多变量输入 和标量输出 的神经网络的可视化。
这两个输出是隐藏单元的两个不同的线性函数。
正如我们在图3.3中看到的,分段函数中的“连接点”取决于初始线性函数
3.3.2 可视化多变量输入 - Visualizing multivariate inputs
为了处理多变量输入

图3.8 具有两个输入
,三个隐藏单元 , , 和一个输出 的网络的处理过程。
- a–c ) 每个隐藏单元的输入是两个输入的线性函数,对应于一个定向平面。亮度表示函数输出。例如,在面板(a)中,亮度表示
。细线是等高线。 - d–f ) 每个平面都被ReLU激活函数剪切(青色线相当于图3.3d–f中的“接头”)。
- g-i ) 剪切的平面然后加权,
- j ) 与一个偏移量相加,该偏移量确定了表面的整体高度。结果是由凸多边形区域组成的连续表面。
其中,现在每个输入都有一个斜率参数。隐藏单元按照通常的方式组合形成输出:
图3.8说明了该网络的处理过程。每个隐藏单元接收两个输入的线性组合,形成了三维输入/输出空间中的一个定向平面。激活函数将这些平面的负值剪切为零。剪切的平面然后在第二个线性函数(方程3.10)中重新组合,创建了一个由凸多边形区域组成的连续分段线性表面(图3.8j)。每个区域对应于不同的激活模式。例如,在中央三角形区域中,第一个和第三个隐藏单元是活跃的,而第二个隐藏单元是非活跃的。
当模型的输入超过两个时,可视化变得困难。然而,解释方式是类似的。输出将是输入的连续分段线性函数,其中线性区域现在是多维输入空间中的凸多面体。
请注意,随着输入维度的增加,线性区域的数量迅速增加(图3.9)。为了对增长速度有所了解,考虑每个隐藏单元定义一个超平面,将该单元在其中活跃和不活跃的空间部分分开(图3.10中的青色线)。如果我们有与输入维度
3.4 浅层神经网络:一般情况 - Shallow neural networks: general case
我们已经描述了几个示例浅层网络,以帮助我们对它们的工作原理有直观的理解。现在我们定义一个一般的浅层神经网络方程
然后将它们线性组合以创建输出:

图3.9 线性区域与隐藏单元。
- a ) 不同输入维度
= {1, 5, 10, 50, 100}时,隐藏单元数量与最大可能区域的关系。在高维度下,区域数量迅速增加;当隐藏单元数量为500个,输入大小为100时,可能存在超过 个区域(实心圆)。 - b ) 同样的数据以参数数量为横坐标进行绘制。实心圆表示与图(a)中相同的模型,具有500个隐藏单元。该网络有51,001个参数,在当下的标准下,算是非常小的模型。

图3.10 线性区域数量与输入维度的关系。
- a ) 在单个输入维度下,具有一个隐藏单元的模型可以创建一个联合,将轴分为两个线性区域。
- b ) 在两个输入维度下,具有两个隐藏单元的模型可以使用两条线(与轴对齐)将输入空间划分为四个区域。
- c ) 在三个输入维度下,具有三个隐藏单元的模型可以使用三个平面(同样与轴对齐)将输入空间划分为八个区域。 根据这个推理,可以得出一个具有
输入维度和 隐藏单元的模型可以使用 个超平面将输入空间划分为 个线性区域。

图3.11 三个输入和两个输出的神经网络可视化。该网络有20个参数。有15个斜率(由箭头表示)和5个偏移(未显示)。
其中
激活函数允许模型描述输入和输出之间的非线性关系,因此它本身必须是非线性的;如果没有激活函数或者使用线性激活函数,整体从输入到输出的映射将被限制为线性。已经尝试了许多不同的激活函数(参见图3.13),但最常见的选择是ReLU(图3.1),它具有易于解释的优点。使用ReLU激活函数,网络将输入空间划分为由ReLU函数中的“连接”计算的超平面的交点定义的凸多面体。每个凸多面体包含一个不同的线性函数。对于每个输出来说,这些多面体是相同的,但它们包含的线性函数可能不同。
3.5 术语 - Terminology
我们通过引入一些术语来总结本章。遗憾的是,神经网络有很多相关的术语。它们通常以“层(layer)”来描述。图3.12的左边是“输入层(input layer)”,中间是“隐藏层(hidden layer)”,右边是“输出层(output layer)”。我们可以说图3.12中的网络有一个包含四个隐藏单元的隐藏层。隐藏单元本身有时被称为“神经元(neurons)”。当我们通过网络传递数据时,隐藏层输入的值(即在应用ReLU函数之前)被称为“预激活(pre-activations)”。隐藏层的值(即在应用ReLU函数之后)被称为“激活(activations)”。
由于历史原因,至少有一个隐藏层的神经网络也被称为“多层感知机(multi-layer perceptron)”,简称为“MLP”。具有一个隐藏层的网络(如本章所述)有时被称为“浅层神经网络(shallow neural networks)”。具有多个隐藏层的网络(如下一章所述)被称为“深层神经网络(deep neural networks)”。连接形成非循环图的神经网络(即本章中的所有示例)被称为“前馈网络(feed-forward networks)”。如果一层中的每个元素都连接到下一层中的每个元素(如本章中的所有示例),则网络是“全连接(fully connected)”的。这些连接表示基础方程中的斜率参数,并被称为“网络权重(network weights)”。偏移参数(图3.12中未显示)称为“偏置(biases)”。

图3.12 术语。浅层网络(shallow neural networks)由输入层(input layer)、隐藏层(hidden layer)和输出层(output layer)组成。每一层通过前向连接(箭头)与下一层相连。因此,这些模型被称为前馈网络(feed-forward networds)。当一层中的每个变量都连接到下一层中的每个变量时,我们称之为全连接网络(fully connected)。每个连接表示基础方程中的斜率参数,这些参数被称为权重(weights)。隐藏层中的变量称为神经元(neural)或隐藏单元(hidden unit)。输入到隐藏单元的值称为预激活(pre-activations),隐藏单元的值(即应用ReLU函数之后)称为激活(activations)。
3.6 总结 - Summary
浅层神经网络有一个隐藏层。它们(i)计算输入的多个线性函数,(ii)将每个结果通过激活函数传递,然后(iii)将这些激活的线性组合形成输出。浅层神经网络根据输入
第4章讨论了深层神经网络,它通过添加更多的隐藏层扩展了本章的模型。第5-7章介绍了如何训练这些模型。
注意事项
“神经”网络(Neural Networks): 如果本章中的模型只是函数,为什么它们被称为“神经网络”呢?不幸的是,这种联系很脆弱。像图3.12这样的可视化图表由节点(输入、隐藏单元和输出)组成,它们之间密集地相互连接。这与哺乳动物大脑中的神经元也有一定的相似之处,后者也具有密集的连接。然而,几乎没有证据表明大脑计算的工作方式与神经网络相同,因此在未来的研究中,将生物学与神经网络联系在一起是没有帮助的。

图3.13 激活函数。
- a) 逻辑sigmoid和双曲正切函数。
- b) Leaky ReLU和带参数0.25的参数化ReLU。
- c) SoftPlus、高斯误差线性单元和sigmoid线性单元。
- d) 带参数0.5和1的指数线性单元。
- e) 缩放指数线性单元。
- f) 带参数0.4、1.0和1.4的Swish。
神经网络的历史(History of neural networks): McCulloch&Pitts(1943)首次提出了人工神经元的概念,它将输入组合起来产生输出,但该模型没有实用的学习算法。Rosenblatt(1958)开发了感知机,它线性地组合输入,然后对它们进行阈值处理以做出是/否决策。他还提供了一个从数据中学习权重的算法。Minsky&Papert(1969)认为线性函数对于一般的分类问题是不足够的,但是添加具有非线性激活函数的隐藏层(因此称为多层感知机)可以允许学习更一般的输入/输出关系。然而,他们得出结论,Rosenblatt的算法无法学习这种模型的参数。直到20世纪80年代才开发出了一个实用的算法(反向传播,参见第7章),并且对神经网络的重要工作重新开始。神经网络的历史由Kurenkov(2020)、Sejnowski(2018)和Schmidhuber(2022)书写。
激活函数(Activation functions): ReLU函数早在Fukushima(1969)时就被使用过。然而,在神经网络的早期,更常见的是使用逻辑sigmoid或双曲正切激活函数(图3.13a)。ReLU函数在Jarrett等人(2009)、Nair&Hinton(2010)和Glorot等人(2011)的推动下重新流行起来,并成为现代神经网络成功的重要组成部分。它具有一个很好的性质,即对于大于零的输入,输出相对于输入的导数始终为1。这有助于训练的稳定性和效率(参见第7章),与sigmoid激活函数的导数相比,后者在大正和大负输入时饱和(接近于零)。
然而,ReLU函数的缺点是它的导数在负输入时为零。如果所有的训练样本都产生负输入给定的ReLU函数,那么我们在训练过程中无法改进输入到该ReLU的参数。相对于传入权重的梯度在局部是平坦的,因此我们无法“下山”。这被称为“死亡ReLU问题”。已经提出了许多解决这个问题的ReLU变体(图3.13b),包括
- (i)Leaky ReLU(Maas等人,2013年),它对于负值也具有线性输出,但斜率较小为0.1
- (ii)The parameterized ReLU(He等人,2015年),它将负部分的斜率视为未知参数
- (iii)The concatenated ReLU(Shang等人,2016年),它产生两个输出,一个在零以下截断(即像典型的ReLU一样),一个在零以上截断。
还研究了各种平滑函数(图3.13c-d),包括softplus函数(Glorot et al.,2011年),高斯误差线性单元(Hendrycks&Gimpel,2016年),sigmoid线性单元(Hendrycks&Gimpel,2016年)和指数线性单元(Clevert et al.,2015年)。其中大部分是为了避免ReLU激活函数的“死亡”问题,同时限制负值的梯度。Klambauer等人(2017年)引入了缩放指数线性单元(图3.13e),这个函数在输入方差有限范围时有助于稳定激活的方差(见第7.5节)。Ramachandran等人(2017年)采用了经验方法来选择激活函数。他们在可能的函数空间中搜索,找到在各种监督学习任务中表现最佳的函数。最优函数被发现是
对于这些激活函数中哪个更优,目前还没有明确的答案。然而,leaky ReLU、parameterized ReLU和许多连续函数在特定情况下可以提供比ReLU更好的性能。在本书的剩余部分,我们将重点关注具有基本ReLU函数的神经网络,因为它们易于根据线性区域的数量来描述所创建的函数。
通用逼近定理(Universal approximation theorem:): 该定理的“宽度版本”表明,存在一个具有有限个隐藏单元的隐藏层的网络,可以以任意精度逼近
线性区域的数量(Number of linear regions): 考虑一个具有
线性、仿射和非线性函数(Linear, affine, and nonlinear functions): 从技术上讲,线性变换
问题
问题 3.1 如果方程3.1中的激活函数是线性的,即
问题 3.2 对于图3.3j中的四个线性区域,指出哪些隐藏单元是非活跃的,哪些是活跃的(即哪些剪切输入,哪些不剪切输入)。
问题 3.3 推导出图3.3j中函数的“关节”位置的表达式,其中使用了十个参数
问题 3.4 绘制图3.3的一个版本,其中第三个隐藏单元的y截距和斜率已经发生了变化,如图3.14c所示。假设其余参数保持不变。

图3.14 一个输入,三个隐藏单元和一个输出的网络处理,用于问题3.4
- a–c) 每个隐藏单元的输入是输入的线性函数。前两个与图3.3中的相同,但最后一个不同。
问题 3.5 证明对于
这被称为ReLU函数的非负齐次性质。
问题 3.6 在问题3.5的基础上,当我们将方程3.3和3.4中的参数
问题 3.7 考虑使用最小二乘损失函数拟合方程3.1中的模型。这个损失函数是否有唯一的最小值?即是否存在一个“最佳”的参数集。
问题 3.8 考虑用(i)阶跃函数
为每个函数重新绘制图3.3。原始参数为。
对于具有一个输入、三个隐藏单元和一个输出的神经网络,提供一个非正式描述可以创建的函数集合。
问题 3.9 证明图3.3中的第三个线性区域的斜率是第一个和第四个线性区域的斜率之和。
问题 3.10 考虑一个具有一个输入、一个输出和三个隐藏单元的神经网络。图3.3中的构造显示了这样可以创建四个线性区域。在什么情况下,这个网络可以产生少于四个线性区域的函数。
问题 3.11 图3.6中的模型有多少个参数。
问题 3.12 图3.7中的模型有多少个参数。
问题 3.13 图3.8中的每个区域的激活模式是什么?换句话说,每个区域哪些隐藏单元是活跃的(传递输入),哪些是非活跃的(剪切输入)。
问题 3.14 写出图3.11中定义网络的方程。从输入计算三个隐藏单元的方程应该有三个,从隐藏单元计算输出的方程应该有两个。
问题 3.15 图3.11中的网络可以创建的三维线性区域的最大可能数量是多少?
问题 3.16 写出一个具有两个输入、四个隐藏单元和三个输出的网络的方程。以图3.11的风格绘制这个模型。
问题 3.17 方程3.11和3.12定义了一个具有
问题 3.18 证明浅层网络的最大区域数目为七,其中
第4章 深度神经网 - deep-neural-networks
上一章介绍了浅层神经网络,它们只有一个隐藏层。本章介绍深度神经网络,它们有多个隐藏层。使用ReLU激活函数,浅层和深层网络都可以描述从输入到输出的分段线性映射。
随着隐藏单元数量的增加,浅层神经网络的描述能力也会提高。事实上,通过足够多的隐藏单元,浅层网络可以在高维空间中描述任意复杂的函数。然而,对于某些函数来说,所需的隐藏单元数量是不可想象的多。相比之下,深层网络在给定参数数量的情况下可以产生比浅层网络更多的线性区域。因此,从实际角度来看,它们可以用来描述更广泛的函数集合。
4.1 组合神经网络 - Composing neural networks
为了深入了解深度神经网络的行为,我们首先考虑将两个浅层网络组合起来,使第一个网络的输出成为第二个网络的输入。考虑两个具有三个隐藏单元的浅层网络(图4.1a )。第一个网络接受输入
和
第二个网络以
和

图4.1 两个具有三个隐藏单元的单层网络的组合。
- a) 第一个网络的输出
成为第二个网络的输入。 - b) 第一个网络使用由三个线性区域组成的函数将输入
映射到输出 ,这些线性区域的斜率交替变化。现在,多个输入 (灰色圆圈)映射到相同的输出 (青色圆圈)。 - c) 第二个网络定义了一个由三个线性区域组成的函数,它将
作为输入并返回 (即,青色圆圈映射到棕色圆圈)。 - d) 当这两个函数组合在一起时,它们的组合效果是:(i)第一个网络将三个不同的输入
映射到任意给定的 值,(ii)这些输入在第二个网络中以相同的方式处理;结果是,面板(c)中第二个网络定义的函数被复制三次,根据面板(b)中区域的斜率进行翻转和缩放。
使用ReLU激活函数,这个模型也描述了一族分段线性函数集合。然而,线性区域的数量可能比具有六个隐藏单元的浅层网络更多。为了看清楚这一点,考虑选择第一个网络产生三个交替斜率的区域(图4.1b )。这意味着三个不同的
组合网络的另一种思考方式是,第一个网络将输入空间
4.2 从组合网络到深度网络 - From composing networks to deep networks
前一节展示了我们可以通过将一个浅层神经网络的输出传递到第二个网络中来创建复杂的函数。现在我们将展示这是一个具有两个隐藏层的深度网络的特例。
第一个网络的输出(
我们可以将其重写为:
其中
由此可见,具有两个隐藏层的网络可以表示通过将一个单层网络的输出传递到另一个网络中创建的函数集合。事实上,它表示了一个更广泛的函数集合,因为在方程4.6 中,九个斜率参数

图4.2 使用2D输入组合神经网络。
- a) 第一个网络(来自图3.8 )有三个隐藏单元,接受两个输入
和 ,返回一个标量输出 。这个输出传递到第二个具有两个隐藏单元的网络中,产生 。 - b) 第一个网络产生的函数由七个线性区域组成,其中一个是平的。
- c) 第二个网络在
中定义了由两个线性区域组成的函数。 - d) 当这些网络组合在一起时,第一个网络的六个非平坦区域被第二个网络分割成两个新区域,总共产生了13个线性区域。

图4.3 深度网络作为输入空间的折叠。
- a) 从图4.1 中思考第一个网络的一种方式是将输入空间“折叠”在一起。
- b) 第二个网络将其函数应用于折叠空间。
- c) 最终输出通过“展开”再次显示出来。

图4.4 具有一个输入、一个输出和两个包含三个隐藏单元的隐藏层的神经网络。
4.3 深度神经网络 - Deep neural networks
在前一节中,我们展示了组合两个浅层网络可以得到一个具有两个隐藏层的深度网络的特殊情况。现在我们考虑一个包含两个隐藏层的深度网络的一般情况,每个隐藏层都包含三个隐藏单元(图4.4 )。
第一层定义如下:
第二层定义如下:
输出定义如下:
考虑这些方程可以得到另一种思考网络如何构建越来越复杂函数的方式(图4.5 ):
-
第一层的三个隐藏单元
、 和 通常通过形成输入的线性函数并通过ReLU激活函数传递来计算(方程4.7 )。 -
第二层的预激活通过对这些隐藏单元的三个新线性函数进行计算(方程4.8 )。此时,我们实际上得到了一个具有三个输出的浅层网络;我们计算了三个分段线性函数,其“接缝”在相同的位置(参见图3.6 )。
-
在第二个隐藏层,对每个函数应用另一个ReLU函数
(方程4.8 ),这会剪切它们并为每个函数添加新的“接缝”。 -
最终输出是这些隐藏单元的线性组合(方程4.9 )。
总之,我们可以将每一层视为“折叠”输入空间,或者创建新的函数,这些函数被剪切(创建新的区域)然后重新组合。前一种观点强调输出函数中的依赖关系,但不强调剪切如何创建新的接缝,而后一种观点则强调相反。最终,这两种描述只提供了关于深度神经网络如何运作的部分见解。不管怎样,重要的是不要忽视这仅仅是一个将输入
尽管这可能很难理解。
4.3.1 超参数 - Hyperparameters
我们可以将深度网络的构建扩展到超过两个隐藏层;现代网络可能具有超过一百个层,每个层都有数千个隐藏单元。每个层中的隐藏单元数量被称为网络的宽度,隐藏层的数量被称为深度。隐藏单元的总数是网络容量的度量。
我们将层数表示为

图4.5 图4.4 中深度网络的计算。
- a-c) 第二个隐藏层的输入(即预激活)是三个分段线性函数,其中线性区域之间的“接头”处于相同的位置(参见图3.6 )。
- d-f) 每个分段线性函数通过ReLU激活函数被剪切为零。
- g-i) 然后,这些剪切的函数分别与参数
, 和 相乘。 - j) 最后,剪切和加权的函数被求和,并添加一个控制整体高度的偏移量
。

图4.6 网络的矩阵表示,其中
为3维输入 , 为2维输出 , 是维度分别为 , 和 的隐藏层 和 。权重存储在矩阵 中,该矩阵将前一层的激活预乘到后一层的预激活中。例如,计算 中的预激活的权重矩阵 具有维度 。它应用于第一层的四个隐藏单元,并创建第二层的两个隐藏单元的输入。偏置存储在向量 中,并具有它们所馈送的层的维度。例如,偏置向量 的长度为三,因为层 包含三个隐藏单元。
4.4 矩阵表示 - Matrix notation
我们已经看到,深度神经网络由交替的线性变换和激活函数组成。我们可以等价地用矩阵表示来描述方程4.7-4.9 :
和
或者更简洁地用矩阵表示为:
在每种情况下,函数
4.4.1 一般形式 - General formulation
对于具有许多层的网络,这种表示方法变得繁琐。因此,从现在开始,我们将第
这个模型的参数
如果第
最后一个偏置向量
我们可以等价地将网络写成一个单一的函数:
4.5 浅层与深层神经网络 - Shallow vs. deep neural networks
第3 章讨论了浅层网络(只有一个隐藏层),而在这里我们描述了深层网络(具有多个隐藏层)。现在我们来比较这些模型。
4.5.1 近似不同函数的能力 - Ability to approximate different functions
在第3.2 节中,我们认为具有足够容量(隐藏单元)的浅层神经网络可以任意接近地模拟任何连续函数。在本章中,我们看到具有两个隐藏层的深层网络可以表示两个浅层网络的组合。如果这两个网络中的第二个计算的是恒等函数,那么这个深层网络就复制了一个单一的浅层网络。因此,只要容量足够,它也可以任意接近地逼近任何连续函数。
4.5.2 每个参数的线性区域数量 - Number of linear regions per parameter
具有一个输入、一个输出和

图4.7 神经网络的线性区域数量随网络深度的增加而迅速增加。
- a) 输入为
的网络。每条曲线代表固定数量的隐藏层 ,当我们改变每层的隐藏单元数 时。对于固定的参数预算(水平位置),深层网络比浅层网络产生更多的线性区域。具有 层和每层 个隐藏单元的网络有471个参数(突出显示的点),可以产生161,051个区域。 - b) 输入为
的网络。每个曲线上的每个后续点代表十个隐藏单元。在这里,具有 层和每层 个隐藏单元的模型有10,801个参数(突出显示的点),可以创建超过 个线性区域。
图4.7a 显示了随着网络将标量输入
这看起来很有吸引力,但函数的灵活性仍然受到参数数量的限制。深度网络可以创建极大数量的线性区域,但这些区域包含复杂的依赖关系和对称性。当我们将深度网络视为将输入空间“折叠”时,我们就会看到其中一些(图4.3 )。因此,除非(i)我们希望逼近的真实函数中存在类似的对称性,或者(ii)我们有理由相信从输入到输出的映射确实涉及较简单函数的组合,否则更多的区域数量并不一定是一个优势。
4.5.3 深度效率 - Depth efficiency
深度网络和浅层网络都可以模拟任意函数,但是一些函数可以用深度网络更高效地逼近。已经确定了一些需要浅层网络具有指数级更多隐藏单元才能达到与深层网络等效逼近的函数。这种现象被称为神经网络的深度效率。这个特性也很有吸引力,但我们不清楚我们想要逼近的真实函数是否属于这个类别。
4.5.4 大型结构化输入 - Large, structured inputs
我们已经讨论了全连接网络,其中每个层的每个元素都对下一层的每个元素有贡献。然而,对于像图像这样的大型结构化输入,这种方法并不实际,因为其输入可能包含大约
解决方案是并行处理局部图像区域,然后逐渐整合来自越来越大的区域的信息。这种从局部到全局的处理很难在不使用多个层的情况下实现(见第10 章)。
4.5.5 训练和泛化 - Training and generalization
深层网络相对于浅层网络的另一个可能的优势是它们更容易拟合;通常比训练浅层网络更容易训练适度深的网络(见图20.2 )。可能是因为过参数化的深度模型有一个大的等价解集合,很容易找到。然而,随着我们添加更多的隐藏层,训练变得更加困难,尽管已经开发了许多方法来缓解这个问题(见第11 章)。
深度神经网络似乎也比浅层网络更好地泛化到新数据。实际上,对于大多数任务,使用具有数十层或数百层的网络可以获得最佳结果。这些现象都没有得到很好的理解,我们将在第20 章中回顾它们。
4.6 总结 - Summary
在本章中,我们首先考虑了当我们组合两个浅层网络时会发生什么。我们认为第一个网络“折叠”了输入空间,然后第二个网络应用了分段线性函数。第二个网络的效果在输入空间折叠到自身的地方被复制。
然后,我们展示了这种浅层网络组合是具有两个层的深层网络的特例。我们将每个层中的ReLU函数解释为在多个位置剪切输入函数并在输出函数中创建更多的“接头”。我们引入了超参数的概念,对于我们迄今看到的网络,超参数包括隐藏层的数量和每个隐藏层中的隐藏单元的数量。
最后,我们比较了浅层和深层网络。我们看到(i)两种网络都可以在足够的容量下逼近任何函数,(ii)深层网络每个参数可以产生更多的线性区域,(iii)某些函数可以通过深层网络更高效地逼近,(iv)大型结构化输入如图像最好在多个阶段进行处理,以及(v)实践中,大多数任务的最佳结果是使用具有许多层的深层网络实现的。
现在我们了解了深层和浅层网络模型,我们将把注意力转向训练它们。在下一章中,我们将讨论损失函数。对于给定的参数值
4.7 注释 - Notes
深度学习: 人们早就知道,通过组合浅层神经网络或者开发具有多个隐藏层的网络,可以构建更复杂的函数。事实上,术语“深度学习”最早是由Dechter (1986) 提出的。然而,由于实际问题的限制,人们对此兴趣有限,无法很好地训练这样的网络。现代深度学习的时代始于Krizhevsky等人 (2012) 报道的图像分类方面的惊人进展。这种突然的进展可以说是由四个因素的结合所致:更大的训练数据集、改进的训练处理能力、ReLU激活函数的使用以及随机梯度下降的使用(参见第6 章)。LeCun等人 (2015) 概述了现代深度学习的早期进展。
线性区域的数量: 对于使用ReLU激活函数的深度网络,其中总共使用了
如果每个
这个表达式中的第一项对应于网络的前
通用逼近定理: 我们在第4.5.1 节中认为,如果深度网络的层具有足够的隐藏单元,则适用于宽度版本的通用逼近定理:存在一个网络,可以以任意精度逼近
深度效率: 一些结果表明,深度网络可以实现的函数无法由任何容量上界指数受限的浅层网络实现。换句话说,为了准确描述这些函数,浅层网络需要指数级更多的单元。这被称为神经网络的深度效率。
Telgarsky (2016)表明,对于任何整数
宽度效率:Lu et al . (2017)研究了是否存在宽浅层网络(即具有大量隐藏单元的浅层网络),而这些网络不能由深度不大得多的窄网络实现。他们表明,存在一类宽而浅的网络,只能由具有多项式深度的窄网络表示。这被称为神经网络的宽度效率。宽度的多项式下界比深度的指数下界更宽松,这表明深度更重要。Vardi et al . (2022)随后证明,使宽度变小的代价只是网络深度线性增加,对于具有ReLU激活的网络来说。
4.8 问题 - Problems
问题4.1 考虑组合图4.8 中的两个神经网络。绘制输入
问题4.2 确定图4.6 中的四个超参数。
问题4.3 利用ReLU函数的非负齐次性质(参见问题3.5 ),证明:

图4.8 问题4.1 的两个网络的组合。
- a) 第一个网络的输出
成为第二个网络的输入。 - b) 第一个网络在输出值
上计算该函数。 - c) 第二个网络在输入范围
上计算该函数。
其中
问题4.4 写出一个深度神经网络的方程,该网络接受
问题4.5 考虑一个深度神经网络,其中
问题4.6 考虑一个网络,其中
问题4.7 为方程3.1 中的浅层神经网络选择参数
问题4.8 图4.9 显示了一个浅层网络的三个隐藏单元的激活情况(如图3.3 所示)。隐藏单元的斜率分别为1.0、1.0和-1.0,而隐藏单元的“连接点”分别位于1/6、2/6和4/6的位置。找到
问题4.9 在问题4.8 之后,使用两个隐藏单元的浅层网络是否可能创建一个具有三个线性区域的函数,该函数在输出值为零和一之间来回振荡?使用四个隐藏单元的浅层网络是否可能创建一个具有五个线性区域的函数,该函数以相同的方式振荡?

图4.9 问题4.8 的隐藏单元激活情况。
- a) 第一个隐藏单元在位置
处有一个连接点,在活动区域内斜率为1。 - b) 第二个隐藏单元在位置
处有一个连接点,在活动区域内斜率为1。 - c) 第三个隐藏单元在位置
处有一个连接点,在活动区域内斜率为-1。
问题4.10 考虑一个深度神经网络,具有单个输入、单个输出和
问题4.11 考虑两个将标量输入
<!-- vscode-markdown-toc -->
本章目录
- 本章目录
- 第5章 损失函数 - Loss functions
- 5.1. 最大似然估计 - Maximum likelihood
- 5.2. 构建损失函数的方法 - Recipe for constructing loss functions
- 5.3. 示例1:单变量回归 - Example 1: univariate regression
- 5.4. 示例2:二分类 - Example 2: binary classification
- 5.5. 示例3:多类分类 - Example 3: multiclass classification
- 5.6. 多个输出 - Multiple outputs
- 5.7. 交叉熵损失 - Cross-entropy loss
- 5.8. 总结 - Summary
- 5.9. 注释 - Notes
- 5.10. 问题 - Problems
<!-- vscode-markdown-toc-config numbering=true autoSave=true /vscode-markdown-toc-config --> <!-- /vscode-markdown-toc -->
第5章 损失函数 - Loss functions
前面的三章介绍了线性回归、浅层神经网络和深层神经网络。每个模型都代表了一族将输入映射到输出的函数,其中具体的成员由模型参数
这个定义需要一个训练数据集
本章提供了一个框架,既可以为实值输出选择最小二乘准则,又可以构建其他预测类型的损失函数。我们考虑*二元分类,其中预测
5.1. 最大似然估计 - Maximum likelihood
在本节中,我们将介绍一种构建损失函数的方法。考虑一个带有参数

图 5.1 预测输出的概率分布。
- a) 回归任务,目标是根据训练数据
(橙色点)从输入 预测实值输出 。对于每个输入值 ,机器学习模型预测输出 的分布 (青色曲线显示 和 时的分布)。损失函数的目标是最大化从相应输入 预测得到的分布下观察到的训练输出 的概率。 - b) 分类任务,预测离散类别
,我们使用离散概率分布,因此模型为每个 预测了一个不同的 可能取值的直方图。 - c) 预测计数
- d) 和方向
,我们分别使用在正整数和圆形域上定义的分布。
5.1.1. 计算输出的概率分布 - Computing a distribution over outputs
这引出了一个问题,即模型
例如,假设预测域是实数集合,即
5.1.2. 最大似然准则 - Maximum likelihood criterion
模型现在为每个训练输入
联合概率项是参数的似然度,因此方程5.1被称为最大似然准则。在这里,我们隐含地做出了两个假设。首先,我们假设数据是独立同分布的(输出
换句话说,我们假设数据是 独立同分布(i.i.d.) 的。
条件概率
可以从两个角度考虑。作为 的函数,它是一个总和为1的概率分布。作为 的函数,它被称为似然度,并且通常不总和为1。

图5.2 对数变换。
- a) 对数函数是单调递增的。如果
,那么 。因此,任何函数 的最大值将与 的最大值在相同的位置。 - b) 函数
。 - c) 此函数的对数
。 所有具有正斜率的 位置在对数变换后仍保持正斜率,而具有负斜率的位置在对数变换后仍保持负斜率。最大值的位置保持不变。
5.1.3. 最大化对数似然度 - Maximizing log-likelihood
最大似然准则(方程5.1)并不是很实用。每个项
这个对数似然度准则是等价的,因为对数是一个单调递增函数:如果
5.1.4. 最小化负对数似然度 - Minimizing negative log-likelihood
最后,我们注意到,按照惯例,模型拟合问题是以最小化损失的形式提出的。为了将最大对数似然准则转化为最小化问题,我们乘以负一,得到负对数似然度准则:
这就形成了最终的损失函数
5.1.5. 推断 - Inference
网络不再直接预测输出
通常可以找到一个关于模型预测的分布参数
5.2. 构建损失函数的方法 - Recipe for constructing loss functions
使用最大似然方法为训练数据
-
选择一个适合的概率分布
,该分布定义在预测 的定义域上,具有分布参数 。 -
设置机器学习模型
来预测其中一个或多个参数,即 和 。 -
为了训练模型,找到使训练数据集对
的负对数似然损失函数最小化的网络参数 :
- 对于新的测试样本
,进行推断时,返回完整的分布 或该分布的最大值。
我们在本章的大部分内容中都将使用这个方法来构建常见预测类型的损失函数。

图5.3 单变量正态分布(也称为高斯分布)定义在实数线
上,具有参数 和 。均值 决定了峰值的位置。方差 的正根(标准差)决定了分布的宽度。由于总概率密度之和为1,方差减小时峰值变高,分布变窄。
5.3. <a name='1-Example1:univariateregression'></a>示例1:单变量回归 - Example 1: univariate regression
我们首先考虑单变量回归模型。在这里,目标是使用具有参数
其次,我们设置机器学习模型
我们的目标是找到使训练数据
当我们训练模型时,我们寻找使该损失最小化的参数
5.3.1. 最小二乘损失函数 - Least squares loss function
现在让我们对损失函数进行一些代数操作。我们要求:
在第二行和第三行之间,我们去掉了第一个项,因为它不依赖于
这些操作的结果是最小二乘损失函数,我们在第2章中讨论线性回归时首次引入了它。
我们可以看到,最小二乘损失函数自然地遵循了以下假设:预测误差是(i)独立的,(ii)服从均值为

图5.4 最小二乘法和最大似然损失在正态分布中的等价性。
- a) 考虑图2.2中的线性模型。最小二乘准则最小化模型预测
(绿线)与真实输出值 (橙色点)之间的偏差的平方和(虚线)。在这种情况下,拟合效果很好,因此这些偏差很小(例如,对于两个突出的点)。 - b) 对于这些参数,拟合效果很差,偏差的平方和很大。
- c) 最小二乘准则源于以下假设:模型预测输出的概率遵循正态分布的均值,并且我们最大化概率。对于第一种情况,模型拟合效果良好,因此数据的概率
很大(负对数概率很小)。 - d) 对于第二种情况,模型拟合效果差,概率很小,负对数概率很大。
5.3.2. 推断 - Inference
网络不再直接预测
对于单变量正态分布,最大位置由均值参数
5.3.3. 估计方差 - Estimating variance
为了构建最小二乘损失函数,我们假设网络预测了正态分布的均值。方程式5.11的最终表达式(也许令人惊讶地)不依赖于方差
在推断中,模型从输入中预测均值
5.3.4. 异方差回归 - Heteroscedastic regression
上述模型假设数据的方差在任何地方都是恒定的。然而,这可能是不现实的。当模型的不确定性随着输入数据的变化而变化时,我们将其称为异方差(与等方差相对,等方差的不确定性是恒定的)。
一种简单的建模方法是训练一个神经网络
这里有一个复杂的点,方差必须是正的,但我们不能保证网络总是产生正的输出。为了确保计算得到的方差是正的,我们将第二个网络输出通过一个将任意值映射为正值的函数。一个合适的选择是平方函数,得到:
这导致了损失函数:
图5.5比较了等方差模型和异方差模型。

图5.5 同方差与异方差回归。
- a) 用于同方差回归的浅层神经网络仅从输入
预测输出分布的均值 。 - b) 结果是,虽然均值(蓝线)是输入
的分段线性函数,但方差在任何地方都是恒定的(箭头和灰色区域显示±2个标准差)。 - c) 用于异方差回归的浅层神经网络还预测方差
(或者更准确地说,计算其平方根,然后再平方)。 - d) 标准差现在也成为输入
的分段线性函数。
5.4. <a name='2-Example2:binaryclassification'></a>示例2:二分类 - Example 2: binary classification
在二分类中,目标是将数据

图5.6 伯努利分布。伯努利分布定义在域
上,有一个参数λ表示观察到 的概率。由此可得,观察到 的概率为 。
再次,我们按照5.2节中的步骤构建损失函数。首先,我们选择一个概率分布,使其适用于输出空间
也可以等价地写成:
其次,我们将机器学习模型

图5.7 逻辑Sigmoid函数。该函数将实数线
映射到0到1之间的数值,因此 。输入为0时映射为0.5。负输入映射为小于0.5的数,正输入映射为大于0.5的数。
因此,我们将分布参数预测为
对于浅层神经网络模型,这在图5.8中进行了描述。损失函数是训练集的负对数似然。
出于将在5.7节中解释的原因,这被称为二元交叉熵损失。变换后的模型输出

图5.8 二分类模型。
- a) 网络输出是一个可以取任意实数值的分段线性函数。
- b) 这通过逻辑Sigmoid函数进行转换,将这些值压缩到范围
。 - c) 转换后的输出预测了
的概率λ(实线)。 因此, 的概率为 (虚线)。对于任何固定的 (垂直切片),我们得到与图5.6中类似的伯努利分布的两个值。损失函数偏好于在与正例 相关的位置 产生大的 值,并在与负例 相关的位置产生小的 值。
5.5. <a name='3-Example3:multiclassclassification'></a>示例3:多类分类 - Example 3: multiclass classification
多类分类的目标是将输入数据示例
我们再次按照5.2节中的步骤进行。我们首先选择一个在预测空间
这些参数被限制在0到1之间的值,并且它们必须共同总和为一,以确保一个有效的概率分布。

图5.9 分类分布。分类分布将概率分配给
个类别,其中 是相关的概率。在这个例子中,有五个类别,所以 。为了确保这是一个有效的概率分布,每个参数 必须在范围 内,并且所有 个参数的总和必须为一。

图5.10
类的多类分类。
- a) 网络有三个分段线性输出,可以取任意值。
- b) 在经过softmax函数后,这些输出被限制为非负且总和为一。 因此,对于给定的输入
,我们计算分类分布的有效参数:这个图的任何垂直切片都会产生三个值,它们总和为一,并且会形成类似于图5.9中的分类分布的条形图的高度。
然后,我们使用一个具有
其中指数函数确保了正性,分母中的求和确保了这
输入
损失函数是训练数据的负对数似然:
其中
转换后的模型输出表示可能类别
5.5.1. 预测其他数据类型 - Predicting other data types
在本章中,我们专注于回归和分类,因为这类问题是广泛存在的。然而,为了进行不同类型的预测,我们只需选择一个适当的分布,并应用5.2节中的步骤。图5.11列举了一系列概率分布及其预测域。本章末尾的问题中探讨了其中的一些。
| 数据类型 | 域 | 分布 | 用途 |
|---|---|---|---|
| 单变量,连续,无界 | 单变量正态分布 | 回归 | |
| 单变量,连续,无界 | 拉普拉斯或t分布 | 鲁棒回归 | |
| 单变量,连续,无界 | 高斯混合分布 | 多模态回归 | |
| 单变量,连续,有下界 | 指数或伽马分布 | 预测大小 | |
| 单变量,连续,有界 | 贝塔分布 | 预测比例 | |
| 单变量,连续,无界 | 多元正态分布 | 多元回归 | |
| 单变量,连续,循环 | 冯·米塞斯分布 | 预测方向 | |
| 单变量,离散,二元 | 伯努利分布 | 二元分类 | |
| 单变量,离散,有界 | 分类分布 | 多类别分类 | |
| 单变量,离散,有下界 | 泊松分布 | 预测事件计数 | |
| 多元,离散,排列 | Plackett-Luce | 排名 |
图5.11 不同预测类型的损失函数的分布。
5.6. 多个输出 - Multiple outputs
通常,我们希望使用同一个模型进行多个预测,因此目标输出
独立性意味着我们将概率
其中
当我们最小化负对数概率时,这个乘积变成了一系列项的和:
其中
为了同时进行两个或更多个预测类型,我们同样假设每个预测的误差是独立的。例如,为了预测风向和风力,我们可以选择冯·米塞斯分布(定义在圆域上)作为风向的分布,指数分布(定义在正实数上)作为风力的分布。独立性假设意味着两个预测的联合似然是各自似然的乘积。当我们计算负对数似然时,这些项将变为可加的。

图5.12 交叉熵方法。
- a) 训练样本的经验分布(箭头表示狄拉克δ函数)。
- b) 模型分布(具有参数
的正态分布)。 在交叉熵方法中,我们最小化这两个分布之间的距离(KL散度),作为模型参数 的函数。
5.7. 交叉熵损失 - Cross-entropy loss
在本章中,我们开发了最小化负对数似然的损失函数。然而,术语交叉熵损失也很常见。在本节中,我们描述交叉熵损失,并证明它等价于使用负对数似然。
交叉熵损失基于找到参数
现在考虑我们在点
其中
其中第一项消失了,因为它不依赖于
第一行中两个项的乘积对应于图5.12a中的点质量与图5.12b中的分布的对数的逐点乘积。我们得到了一组有限的加权概率质量,这些质量以数据点为中心。在最后一行,我们消除了常数缩放因子
在机器学习中,分布参数
这正是第5.2节中的负对数似然准则。
由此可见,最大化数据似然的负对数似然准则和最小化模型与经验数据分布之间的距离的交叉熵准则是等价的。
5.8. 总结 - Summary
在之前,我们将神经网络视为直接从数据
最小二乘回归准则是这种方法的自然结果;它源于
在之前的章节中,我们开发了神经网络模型。在本章中,我们为决定模型对给定参数描述训练数据的程度开发了损失函数。下一章将考虑模型训练,我们的目标是找到最小化这个损失的模型参数。
5.9. 注释 - Notes
基于正态分布的损失函数: Nix & Weigend (1994) 和 Williams (1996) 研究了异方差非线性回归,其中输出的均值和方差都是输入的函数。在无监督学习的背景下,Burda et al . (2016) 使用基于对角协方差的多元正态分布作为损失函数,而Dorta et al . (2018) 使用基于完全协方差的正态分布作为损失函数。
鲁棒回归: Qi et al . (2020) 研究了最小化绝对误差而不是均方误差的回归模型的性质。这个损失函数假设输出服从拉普拉斯分布,并估计给定输入的中位数输出,而不是均值。Barron (2019) 提出了一个参数化鲁棒性程度的损失函数。在概率上解释时,它产生了一族包括正态分布和柯西分布在内的一元概率分布。
估计分位数: 有时候,我们可能不想在回归任务中估计均值或中位数,而是想预测一个分位数。例如,在风险模型中,我们想知道真实值在预测值的90%以下的时间内。这被称为分位数回归(K oenker & Hallock , 2001 。可以通过拟合一个异方差回归模型,然后根据预测的正态分布估计分位数来实现。或者,可以直接使用分位数损失(也称为pinball损失) 来估计分位数。在实践中,这最小化了数据与模型之间的绝对偏差,但是对一个方向的偏差给予了比另一个方向更大的权重。最近的研究同时预测多个分位数,以了解整体分布形状 (Rodrigues & Pereira , 2020 .
类别不平衡和焦点损失: Lin et al . (2017c 解决了分类问题中的数据不平衡。如果某些类别的示例数量远大于其他类别,则标准的最大似然损失效果不好;模型可能会集中于对来自主导类别的分类正确的示例更加自信,并且对分类较少的类别分类不好。Lin et al . (2017c 引入了焦点损失,它添加了一个额外的参数,降低了分类正确的示例的影响,以提高性能。
学习排序: Cao et al . (2007) 、 Xia et al . (2008) 和 Chen et al . (2009) 都在学习排序数据的损失函数中使用了Plackett-Luce模型。这是学习排序的列表方法,因为模型一次摄入整个待排序的对象列表。其他方法包括点方法,其中模型摄入单个对象,以及对方法,其中模型摄入对象对。Chen et al . (2009) 总结了学习排序的不同方法。
其他数据类型: Fan et al . (2020) 使用基于贝塔分布的损失函数来预测介于零和一之间的值。Jacobs et al . (1991) 和Bishop (1994) 研究了用于多模态数据的混合密度网络。这些模型将输出建模为条件于输入的高斯混合分布(见图5.14 。Prokudin et al . (2018) 使用von Mises分布来预测方向(见图5.13 。Fallah et al . (2009) 使用泊松分布构建了用于预测计数的损失函数(见图5.15) 。Ng et al . (2017) 使用基于伽玛分布的损失函数来预测持续时间。

图5.13 von Mises分布定义在圆域
上。它有两个参数。均值 确定了峰值的位置。浓度 的作用类似于方差的倒数。因此, 大致相当于正态分布中的标准差。
非概率方法: 在本章中讨论的概率方法并非必须采用,但近年来已成为默认选择;任何旨在减少模型输出与训练输出之间距离的损失函数都可以使用,而距离可以以任何合理的方式定义。有几种众所周知的非概率机器学习模型用于分类,包括支持向量机(Vapnik, 1995; Cristianini & Shawe-Taylor, 2000),它们使用 hinge loss,以及AdaBoost(Freund & Schapire, 1997),它使用 exponential loss.
5.10. 问题 - Problems
问题5.1 证明逻辑sigmoid函数
问题5.2 二分类问题的损失函数
其中
问题5.3∗ 假设我们想要构建一个模型,根据局部气压

图5.14 多峰数据和高斯混合密度。
- a) 示例训练数据,对于输入
的中间值,相应的输出 遵循两条路径之一。例如,在 时,输出 可能大致为-2或+3,但不太可能在这些值之间。 - b) 高斯混合是适用于这种数据的概率模型。正如名称所示,该模型是两个或更多个具有不同均值和方差(这里是两个加权分布,虚线蓝色和橙色曲线)的正态分布的加权和(实线青色曲线)。当均值相距较远时,形成多峰分布。
- c) 当均值接近时,混合可以模拟单峰但非正态密度。
其中
使用第5.2节中的方法,开发一个用于学习模型
问题5.4∗ 有时,输入
其中
使用第5.2节中的方法,构建一个用于训练模型
问题5.5 考虑将问题5.3中的模型扩展为使用两个von Mises分布来预测风向。为该模型编写似然函数$Pr(y|θ) $的表达式。网络需要产生多少个输出?

图5.15 泊松分布。这个离散分布定义在非负整数
上。它有一个称为速率的单参数 ,它是分布的均值。a-c)速率分别为1.4、2.8和6.0的泊松分布。
问题5.6 考虑构建一个模型,根据包含有关白天时间、经度和纬度以及街区类型的数据
为这个模型设计一个损失函数,假设我们可以访问
问题5.7 考虑一个多元回归问题,我们预测十个输出,即
问题5.8 构建一个损失函数,用于基于每个维度具有不同方差
问题5.9 考虑一个多元回归问题,我们从数据
问题5.10 将问题5.3中的模型扩展到同时预测风向和风速,并定义相应的损失函数。
本章目录
- 本章目录
- 第6章 模型拟合 - Fitting models
<!-- vscode-markdown-toc-config numbering=true autoSave=true /vscode-markdown-toc-config --> <!-- /vscode-markdown-toc -->
第6章 模型拟合 - Fitting models
第3章和第4章介绍了浅层和深层神经网络。它们代表了一系列分段线性函数,其中参数确定了特定的函数。第5章介绍了损失函数 - 一个表示网络预测与训练集的真实值之间不匹配程度的数值。
损失函数取决于网络的参数,本章将讨论如何找到使损失最小化的参数值。这被称为学习网络参数,或者简单地称为训练或拟合模型。该过程是选择初始参数值,然后迭代以下两个步骤:(i) 计算损失相对于参数的导数(梯度),(ii) 根据梯度调整参数以减小损失。经过多次迭代,我们希望达到损失函数的全局最小值。
本章解决了这两个步骤中的第二个步骤;我们考虑调整参数以减小损失的算法。第7章讨论了如何初始化参数和计算神经网络的梯度。
6.1 梯度下降 - Gradient descent
为了拟合模型,我们需要一个输入/输出对的训练集
有许多优化算法,但用于训练神经网络的标准方法是迭代的。这些算法启发式地初始化参数,然后以使损失减小的方式重复调整参数。
这个类别中最简单的方法是梯度下降。它从初始参数
步骤1. 计算损失相对于参数的导数:
步骤2. 根据以下规则更新参数:
其中正标量
第一步计算当前位置的损失函数的梯度。这确定了损失函数的上坡方向。第二步向下坡移动一个小距离
在损失函数的最小值处,曲面必须是平坦的(否则我们可以通过下坡进一步改进)。因此,梯度将为零,参数将停止变化。在实践中,我们监视梯度的大小,并在其变得太小时终止算法。
6.1.1 线性回归示例 - Linear regression example
考虑将梯度下降应用于第2章中的一维线性回归模型。模型
给定包含
其中术语

图6.1 线性回归模型的梯度下降。
- a) 包含
个输入/输出对 的训练集。 - b) 损失函数显示梯度下降的迭代过程。我们从点0开始,沿着最陡的下坡方向移动,直到无法进一步改进,到达点1。然后我们重复这个过程。我们测量点1处的梯度并向下移动到点2,依此类推。
- c) 这可以更好地可视化为热图,其中亮度表示损失。仅经过四次迭代,我们就已经接近最小值。
- d) 参数为点0(最浅的线)的模型非常糟糕地描述了数据,但是每次迭代都会改善拟合。参数为点4(最暗的线)的模型已经是对训练数据的合理描述。
损失函数关于参数的导数可以分解为各个贡献的导数之和:
其中这些导数由以下公式给出:
图6.1显示了该算法的进展,我们按照方程6.6和6.7迭代计算导数,然后使用方程6.3中的规则更新参数。在这种情况下,我们使用线搜索过程来找到每次迭代中使损失最大程度减小的
6.1.2 Gabor模型示例 - Gabor model example
线性回归问题的损失函数(图6.1c)总是具有明确定义的全局最小值。更正式地说,它们是 凸函数,这意味着没有弦(曲面上两点之间的线段)与函数相交。凸性意味着无论我们在哪里初始化参数,只要我们沿着下坡走,就一定会达到最小值;训练过程不会失败。
不幸的是,大多数非线性模型的损失函数,包括浅层和深层网络,都是 非凸的。由于参数的数量,可视化神经网络的损失函数是具有挑战性的。因此,我们首先探索一个具有两个参数的简单非线性模型,以了解非凸损失函数的特性:
这个Gabor模型将标量输入
考虑一个包含
再次强调,目标是找到最小化该损失的参数

图6.2 Gabor模型。这个非线性模型将标量输入
映射到标量输出 ,并具有参数 。它描述了一个随着距离中心的增加而振幅减小的正弦函数。参数 确定中心的位置。随着 的增加,函数向左移动。参数 相对于中心沿x轴挤压函数。随着 的增加,函数变窄。a-c) 具有不同参数的模型。

图6.3 用于拟合Gabor模型的训练数据。训练数据集包含28个输入/输出示例
。这些数据是通过均匀采样 ,将样本通过参数为 的Gabor模型,并添加正态分布噪声而创建的。
6.1.3 局部最小值和鞍点 - Local minima and saddle points
图6.4展示了与该数据集相关的Gabor模型的损失函数。这里有许多局部最小值(青色圆圈)。在这些点上,梯度为零,如果我们朝任何方向移动,损失都会增加,但我们并不处于函数的整体最小值。具有最低损失的点被称为全局最小值,用灰色圆圈表示。
如果我们从一个随机位置开始,使用梯度下降向下移动,不能保证我们最终会到达全局最小值并找到最佳参数(图6.5a)。同样或甚至更有可能的是,算法会停止在其中一个局部最小值上。此外,我们无法知道是否在其他地方有更好的解决方案。

图6.4 Gabor模型的损失函数。
- a) 损失函数是非凸的,除了全局最小值(灰色圆圈)外,还有多个局部最小值(青色圆圈)。它还包含鞍点,鞍点处梯度局部为零,但函数在一个方向上增加,在另一个方向上减少。蓝色十字是鞍点的一个例子;当我们水平向任一方向移动时,函数会减小,但当我们垂直移动时,函数会增加。
- b-f) 与不同最小值相关的模型。在每种情况下,没有小的变化可以减少损失。面板(c)显示了全局最小值,其损失为0.64。

图6.5 梯度下降与随机梯度下降。
- a) 带有线搜索的梯度下降。只要梯度下降算法在损失函数的正确“山谷”中初始化(例如点1和点3),参数估计就会稳步向全局最小值移动。然而,如果它在这个山谷之外初始化(例如点2),它将下降到其中一个局部最小值。
- b) 随机梯度下降在优化过程中添加了噪音,因此有可能从错误的山谷(例如点2)中逃脱并达到全局最小值。
此外,损失函数中包含鞍点(例如图6.4中的蓝色十字)。在这里,梯度为零,但函数在某些方向上增加,在其他方向上减少。如果当前参数不恰好在鞍点上,那么梯度下降可以通过向下移动来逃脱。然而,鞍点附近的表面是平坦的,所以很难确定训练是否已经收敛;如果我们在梯度很小的时候终止算法,可能会错误地停在鞍点附近。
6.2 随机梯度下降 - Stochastic gradient descent
Gabor模型有两个参数,所以我们可以通过以下两种方法找到全局最小值:(i)穷举搜索参数空间或(ii)从不同位置重复开始梯度下降,并选择具有最低损失的结果。然而,神经网络模型可能有数百万个参数,因此这两种方法都不实际。简而言之,使用梯度下降找到高维损失函数的全局最优解是具有挑战性的。我们可以找到一个最小值,但无法确定这是否是全局最小值,甚至是一个好的最小值。
其中一个主要问题是梯度下降算法的最终目的完全由起始点决定。随机梯度下降(SGD) 试图通过在每一步中向梯度添加一些噪音来解决这个问题。解决方案仍然平均向下移动,但在任何给定的迭代中,选择的方向不一定是最陡的向下方向。实际上,它可能根本不是向下的。SGD算法有可能暂时向上移动,从而从一个损失函数的“山谷”跳到另一个(图6.5b)。

图6.6 批量大小为三的Gabor模型的SGD的另一种视角。
- a) 整个训练数据集的损失函数。在每次迭代中,可能的参数变化具有概率分布(插图显示了样本)。这些对应于三个批次元素的不同选择。
- b) 一个可能的批次的损失函数。SGD算法在这个函数上向下移动,移动距离由学习率和局部梯度大小决定。当前模型(插图中的虚线函数)改变以更好地适应批次数据(实线函数)。
- c) 不同的批次创建不同的损失函数,并导致不同的更新。
- d) 对于这个批次,算法在批次损失函数上向下移动,但在全局损失函数(面板a)上向上移动。这就是SGD如何逃脱局部最小值。
6.2.1 批次和迭代次数 - Batches and epochs
引入随机性的机制很简单。在每次迭代中,算法会选择训练数据的一个随机子集,并仅从这些样本中计算梯度。这个子集被称为小批量或批次。因此,迭代
其中
批次通常是从数据集中无重复地随机抽取的。算法会遍历训练样本,直到使用完所有数据,然后再次从完整的训练数据集中进行抽样。对整个训练数据集的一次遍历称为迭代次数。一个批次可以只包含一个样本,也可以包含整个数据集。后一种情况称为全批次梯度下降,与常规(非随机)梯度下降相同。
随机梯度下降的另一种解释是,它在每次迭代中计算不同损失函数的梯度;损失函数取决于模型和训练数据,因此对于每个随机选择的批次,损失函数都会有所不同。从这个角度来看,随机梯度下降在不断变化的损失函数上执行确定性梯度下降(图6.6)。然而,尽管存在这种变数,任意点处的期望损失和期望梯度与梯度下降保持相同。
6.2.2 随机梯度下降的特性 - Properties of stochastic gradient descent
随机梯度下降具有几个吸引人的特点。
- 首先,尽管它在轨迹中添加了噪声,但它仍然在每次迭代中改善对数据子集的拟合。因此,即使更新不是最优的,它们也往往是合理的。
- 其次,由于它无重复地抽取训练样本并遍历数据集,所有训练样本仍然平等地贡献。
- 第三,仅从训练数据的子集计算梯度的计算成本较低。
- 第四,它(原则上)可以避免局部最小值。
- 第五,它减少了陷入鞍点的机会;在损失函数的任何点上,至少有一些可能的批次会有一个显著的梯度。
- 最后,有一些证据表明,在实践中,随机梯度下降找到的神经网络参数能够使其对新数据具有良好的泛化能力(见第9.2节)。
随机梯度下降不一定以传统意义上的“收敛”。然而,好处是,当我们接近全局最小值时,所有数据点都能被模型很好地描述。因此,无论选择哪个批次,梯度都会很小,参数的变化也不会太大。在实践中,随机梯度下降通常使用学习率调度。学习率
6.3 动量 - Momentum
对随机梯度下降的常见修改是添加一个动量项。我们使用当前批次计算的梯度和上一步移动的方向的加权组合来更新参数:
其中
动量计算的递归公式意味着梯度步长是所有先前梯度的无限加权和,随着时间的推移,权重变小。如果所有这些梯度在多次迭代中都对齐,那么有效学习率会增加,但如果梯度方向反复改变,使得求和项中的项相互抵消,那么有效学习率会减小。总体效果是轨迹更加平滑,在山谷中减少振荡行为(图6.7)。

图6.7 带动量的随机梯度下降。
- a) 常规的随机下降方法在寻找最小值时走了一条非常间接的路径。
- b) 使用动量项,当前步骤的变化是前一次变化和从批量计算的梯度的加权组合。这样可以平滑轨迹并加快收敛速度。
6.3.1 Nesterov加速动量 - Nesterov accelerated momentum
动量项可以被看作是SGD算法下一步移动的粗略预测。Nesterov加速动量(图6.8)在这个预测点计算梯度,而不是在当前点计算梯度:
现在梯度在

图6.8 Nesterov加速动量。解决方案沿着虚线行进到达点1。传统的动量更新在点1处测量梯度,沿着该方向移动一定距离到达点2,然后添加上一次迭代的动量项(即沿着虚线方向),到达点3。Nesterov动量更新首先应用动量项(从点1移动到点4),然后测量梯度并应用更新到达点5。
6.4 Ada - Adam
固定步长的梯度下降具有以下不良特性:它对与大梯度相关的参数进行大幅调整(也许我们应该更加谨慎),对与小梯度相关的参数进行小幅调整(也许我们应该进一步探索)。当损失曲面的梯度在一个方向上比另一个方向陡峭得多时,很难选择一个学习率既能在两个方向上取得良好进展,又能保持稳定(图6.9a-b)。
一种直接的方法是对梯度进行归一化,以便我们在每个方向上移动一个固定的距离(由学习率控制)。为此,我们首先测量梯度
然后,我们应用更新规则。
其中,平方根和除法都是逐点进行的,
自适应矩估计,或称为Adam,采用了这个思想,并在梯度估计和平方梯度上添加了动量。
其中,

图6.9 自适应矩估计(Adam)。
- a)这个损失函数在垂直方向上变化很快,但在水平方向上变化很慢。如果我们使用一个在垂直方向上取得良好进展的学习率运行全批量梯度下降,那么算法需要很长时间才能到达最终的水平位置。
- b)如果选择的学习率使算法在水平方向上取得良好进展,那么它在垂直方向上会超调并变得不稳定。
- c)一种直接的方法是在每个步骤中沿着每个轴移动一个固定的距离,以便我们在两个方向上都向下移动。这是通过归一化梯度幅值并仅保留符号来实现的。然而,这通常不会收敛到精确的最小值,而是在最小值周围来回振荡(在这里是在最后两个点之间)。
- d)Adam算法在估计梯度和归一化项中都使用了动量,从而创建了一个更平滑的路径。
使用动量等价于对这些统计量的历史进行加权平均。在过程开始时,所有先前的测量实际上都是零,导致了不现实地小的估计值。因此,我们使用以下规则修改这些统计量。
由于
最后,我们像以前一样更新参数,但使用修改后的项。
结果是一个能够收敛到整体最小值并在参数空间的每个方向上取得良好进展的算法。请注意,Adam通常在随机设置中使用,其中梯度及其平方是从小批量中计算得到的。
而在实际操作中,轨迹是充满噪音的。
正如我们将在第7章中看到的那样,神经网络参数的梯度大小可能取决于它们在网络中的深度。Adam算法有助于补偿这种倾向,并平衡不同层之间的变化。在实践中,Adam算法还具有初始学习率不敏感的优势,因为它避免了类似于图6.9a--b中的情况,所以它不需要复杂的学习率调度。
6.5 训练算法的超参数 - Training algorithm hyperparameters
学习算法、批量大小、学习率调度和动量系数的选择都被视为训练算法的超参数;这些超参数直接影响最终模型的性能,但与模型参数不同。选择这些超参数可能更多地是一门艺术而不是科学,通常会使用不同的超参数训练多个模型,并选择最佳模型。这被称为超参数搜索。我们将在第8章中再次讨论这个问题。
6.6 总结 - Summary
本章讨论了模型训练。这个问题被定义为寻找与损失函数
对于非线性函数,损失函数可能同时具有局部最小值(梯度下降被困住的地方)和鞍点(梯度下降可能看起来已经收敛,但实际上没有)。随机梯度下降有助于缓解这些问题。在每次迭代中,我们使用不同的随机数据子集(一个批次)来计算梯度。这样可以为过程添加噪音,并帮助防止算法陷入参数空间的次优区域。每次迭代也更加节省计算资源,因为它只使用数据的一个子集。我们还看到添加动量项可以使收敛更加高效。最后,我们介绍了Adam算法。
本章的思想适用于优化任何模型。下一章将讨论与神经网络训练相关的两个方面。首先,我们将解决如何计算神经网络参数相对于损失的梯度的问题。这是通过著名的反向传播算法实现的。其次,我们将讨论如何在优化开始之前初始化网络参数。如果初始化不慎,优化使用的梯度可能会变得非常大或非常小,从而阻碍训练过程。
6.7 注释 - Notes
优化算法: 优化算法在工程领域被广泛使用,通常更常用术语“目标函数”而不是损失函数或成本函数。梯度下降法是由柯西(1847年)发明的,而随机梯度下降法至少可以追溯到罗宾斯和蒙罗(1951年)。两者之间的现代折中方法是随机方差减少下降法(Johnson和Zhang,2013),其中完整的梯度周期性计算,随机更新插入其中。关于神经网络优化算法的综述可以在Ruder(2016年)、Bottou等人(2018年)和Sun(2020年)中找到。Bottou(2012年)讨论了SGD的最佳实践,包括无重复洗牌。
第20章讨论了在深度学习中鞍点和局部最小值到底有多大问题。实际上,深度网络训练起来出奇地容易。
凸性、极小值和鞍点: 如果没有弦(曲面上两点之间的线段)与函数相交,则函数是凸的。这可以通过代数方法进行测试,考虑到Hessian矩阵(二阶导数的矩阵)。
如果Hessian矩阵在所有可能的参数值上都是正定的(具有正的特征值),则函数是凸的;损失函数将呈现出平滑的碗状(如图6.1c),因此训练相对容易。只会有一个全局最小值,没有局部最小值或鞍点。
对于任何损失函数,梯度为零的位置处的Hessian矩阵的特征值允许我们将此位置分类为(i)极小值(特征值都是正的),(ii)极大值(特征值都是负的)或(iii)鞍点(正的特征值与我们处于极小值的方向相关,负的特征值与我们处于极大值的方向相关)。
线搜索: 固定步长的梯度下降法效率低下,因为移动的距离完全取决于梯度的大小。当函数变化快时(也许应该更加谨慎),它会移动很远,但当函数变化缓慢时(也许应该进一步探索),它只会移动很短的距离。因此,梯度下降法通常与线搜索过程结合使用,我们沿着期望的方向对函数进行采样,以找到最佳的步长。其中一种方法是括号法(图6.10)。梯度下降法的另一个问题是,当下降到山谷时会导致低效的振荡行为(例如,图6.5a中的路径1)。
超越梯度下降法: 已经开发了许多解决梯度下降法问题的算法。最著名的是牛顿法,它利用Hessian矩阵的逆来考虑曲面的曲率;如果函数的梯度变化快,那么它会应用更谨慎的更新。这种方法消除了线搜索的需要,并且不会出现振荡行为。然而,它也有自己的问题;在其最简单的形式中,它朝着最近的极值点移动,但如果我们离山顶比离山谷更近,那么这可能是一个极大值。此外,当参数数量很大时,如神经网络中,计算逆Hessian矩阵是不可行的。
SGD的特性: 当学习率趋近于零时,SGD的极限是一个随机微分方程Jastrzębski et al . (2018 )。他们证明了这个方程依赖于学习率与批量大小的比率,并且学习率与批量大小的比率与找到的最小值的宽度之间存在关系。较宽的最小值被认为更理想;如果测试数据的损失函数相似,那么参数估计的小误差对测试性能的影响很小。He et al . (2019 )证明了SGD的泛化界限与批量大小与学习率的比率呈正相关。他们在不同的架构和数据集上训练了大量的模型,并发现当批量大小与学习率的比率较低时,测试准确率会提高。Smith et al . (2018 )和Goyal et al . (2018 )也确定了批量大小与学习率的比率对泛化很重要(见图20.10)。
动量: 使用动量加速优化的想法可以追溯到Polyak (1964)。Goh (2017)对动量的特性进行了深入讨论。Nesterov加速梯度法是由Nesterov (1983)引入的。Nesterov动量首次应用于随机梯度下降的上下文中,由Sutskever et al . (2013)提出。

图6.10 使用括号法进行线搜索。
- a) 当前解位于位置
(橙色点),我们希望搜索区域 (灰色阴影区域)。我们在搜索区域内定义两个点 并评估这些点上的损失函数。这里 ,因此我们消除了范围 。 - b) 现在我们在精细化的搜索区域中重复此过程,并发现
,因此我们消除了范围 。 - c) 我们重复此过程,直到最小值被紧密地夹住。
自适应训练算法: AdaGrad(Duchi et al.,2011)是一种优化算法,通过为每个参数分配不同的学习率来解决某些参数可能需要移动更远的可能性。AdaGrad使用每个参数的累积平方梯度来衰减其学习率。这种方法的缺点是学习率随时间的推移而减小,学习可能在找到最小值之前停止。RMSProp(Hinton et al.,2012a)和AdaDelta(Zeiler,2012)修改了这个算法,以帮助防止这些问题,通过递归更新平方梯度项。
到目前为止,最广泛使用的自适应训练算法是自适应矩估计优化或Adam(Kingma & Ba,2015)。它结合了动量(其中梯度向量随时间平均)和AdaGrad、AdaDelta和RMSProp(其中使用平滑的平方梯度项来修改每个参数的学习率)的思想。Adam算法的原始论文对于凸损失函数提供了收敛证明,但是Reddi et al . (2018 )发现了一个反例,他们开发了一种名为AMSGrad的修改版Adam算法,该算法确实收敛。当然,在深度学习中,损失函数是非凸的,Zaheer et al . (2018 )随后开发了一种自适应算法称为YOGI,并证明它在这种情况下收敛。尽管存在这些理论上的异议,原始的Adam算法在实践中表现良好,并且被广泛使用,尤其是因为它在广泛的超参数范围内表现良好并且能够快速取得初步进展。
自适应训练算法的一个潜在问题是学习率基于观察到的梯度的累积统计信息。在训练开始时,样本较少,这些统计信息可能非常嘈杂。这可以通过学习率预热(Goyal et al ,2018)来解决,其中学习率在前几千次迭代中逐渐增加。另一种解决方案是修正Adam(Liu et al .,2021a),它以一种逐渐改变动量项的方式随时间变化,以避免高方差。Dozat (2016)将Nesterov动量合并到Adam算法中。
SGD vs. Adam: 关于SGD和Adam的相对优劣一直存在着激烈的讨论。Wilson et al . (2017 )提供了证据表明,带有动量的SGD可以找到比Adam更低的极小值,而且在各种深度学习任务中具有更好的泛化能力。然而,这很奇怪,因为当
穷举搜索: 本章讨论的所有算法都是迭代的。一个完全不同的方法是对网络参数进行量化,并使用SAT求解器对得到的离散化参数空间进行穷举搜索(Mézard & Mora , 2009 )。这种方法有潜力找到全局最小值,并提供保证在其他地方没有更低的损失,但只适用于非常小的模型。
6.8 问题 - Problems
问题6.1 证明方程6.5中的最小二乘损失函数的导数可以用方程6.7中的表达式表示。
问题6.2 如果Hessian矩阵
并通过证明特征值始终为正来证明该函数是凸的。可以通过证明矩阵的迹和行列式都是正的来完成。
问题6.3 计算Gabor模型(方程6.8)中最小二乘损失
问题6.4∗ 逻辑回归模型使用线性函数将输入
其中
- (i) 对于不同的
和 的值,绘制该模型中的 与 的图,并解释每个参数的定性含义。 - (ii) 这个模型适合使用什么样的损失函数?
- (iii) 计算该损失函数对参数的导数。
- (iv) 从均值为-1,标准差为1的正态分布中生成十个数据点,并将其标记为
。从均值为1,标准差为1的正态分布中生成另外十个数据点,并将其标记为 。绘制损失函数关于两个参数 和 的热力图。 - (v) 这个损失函数是凸的吗?你如何证明?
问题6.5∗ 计算简单神经网络模型(方程3.1)中的十个参数对最小二乘损失的导数:
仔细考虑ReLU函数
问题6.6 图6.11中的哪个函数是凸的?请解释你的答案。将点1-7分别描述为(i)局部最小值,(ii)全局最小值,或(iii)既不是。

图6.11 问题6.6的三个1D损失函数。
问题6.7∗ 图6.5a中路径1的梯度下降轨迹在向最小值的山谷下降时来回震荡,效率低下。值得注意的是,它在每一步都与之前的方向呈直角转弯。对于这些现象提供一个定性解释。提出一个可能有助于防止这种行为的解决方案。
问题6.8∗ (非随机)梯度下降在固定学习率下能够逃离局部最小值吗?
问题6.9 我们在大小为100的数据集上使用批量大小为20的随机梯度下降算法进行了1000次迭代。我们训练了多少个时期的模型?
问题6.10 证明动量项**mt(方程6.11)是前几次迭代的梯度的无限加权和,并推导出该和的系数(权重)的表达式。
问题6.11 如果模型有一百万个参数,Hessian矩阵的维度是多少?
本章目录
- 本章目录
- 第7章 梯度和初始化 - Gradients and initialization
第7章 梯度和初始化 - Gradients and initialization
第6章介绍了迭代优化算法。这些是通用的方法,用于寻找函数的最小值。在神经网络的背景下,它们找到使模型能够准确预测输入的训练输出的参数,从而最小化损失。基本的方法是随机选择初始参数,然后进行一系列小的改变,以平均降低损失。每个改变都基于当前位置的参数对损失的梯度。本章讨论了神经网络特有的两个问题。首先,我们考虑如何高效地计算梯度。这是一个严峻的挑战,因为目前最大的模型具有
7.1 问题定义 - Problem definitions
考虑一个具有多元输入
其中函数
我们还有单独的损失函数
用于训练神经网络的最常用的优化算法是随机梯度下降(SGD),它更新参数如下:
其中
对于每个层
在本章的第二部分,我们考虑在开始训练之前如何为网络设置一个初始化的参数。我们描述了选择初始权重
7.2 计算导数 - Computing derivatives
损失函数的导数可以告诉我们当参数发生微小变化时,损失函数的变化情况。优化算法就是利用这些信息来调整参数,使得损失函数的值变小。反向传播算法用于计算这些导数。数学细节比较复杂,因此我们先来看看这两个观察结果,找找感觉。
观察1: 每个权重(属于
观察2: 偏置或权重的微小变化会引起连锁反应,通过网络传递产生一系列变化。这种变化会修改其目标隐藏单元的值。这反过来又会改变后续层中的隐藏单元的值,进而改变下一层的隐藏单元的值,依此类推,直到对模型输出进行修改,最终影响损失函数。

图7.1 反向传播前向传递。目标是计算损失函数$ℓ $对每个权重(箭头)和偏置(未显示)的导数。换句话说,我们想知道每个参数的微小变化将如何影响损失函数。每个权重都乘以其源隐藏单元,并将结果添加到其目标隐藏单元。因此,任何对权重的微小变化的影响都将由源隐藏单元的激活值进行缩放。例如,蓝色权重应用于第1层的第2个隐藏单元;如果该单元的激活值加倍,那么对蓝色权重的微小变化的影响也将加倍。因此,为了计算权重的导数,我们需要计算并存储隐藏层的激活值。这被称为前向传递,因为它涉及按顺序运行网络方程。
因此,为了知道如何改变参数会修改损失函数,我们还需要知道每个后续隐藏层的变化如何进一步修改它们的后继层。当考虑同一层或更早层中的其他参数时,也需要这些相同的量。因此,我们可以计算它们一次并重复使用它们。例如,考虑计算输入到隐藏层$h_{3}, h_{2}
-
要计算输入到隐藏层$h_{3}
h_{3} f $,以及(ii)这个输出的变化如何改变损失函数(图7.2a)。 -
要计算输入到隐藏层$h_{2}
h_{2} h_{3} h_{3} $如何改变模型输出,以及(iii)这个输出的变化如何改变损失函数(图7.2b)。 -
要计算输入到隐藏层$h_{1}
h_{1} h_{2} h_{2} h_{3} h_{3} $如何改变模型输出,以及(iv)模型输出的变化如何改变损失函数(图7.2c)。

图7.2 反向传播后向传递。
- a) 要计算一个输入到
层的权重的变化如何影响损失,我们需要知道 层的隐藏单元如何改变模型输出 ,以及 如何改变损失。 - b) 要计算一个输入到
层的权重的微小变化如何影响损失,我们需要知道:(i) 层的隐藏单元如何改变 ,(ii) 如何改变 ,以及(iii) 如何改变损失。 - c) 类似地,要计算一个输入到
层的权重的微小变化如何影响损失,我们需要知道 如何改变 ,以及这些变化如何传播到损失。 反向传播首先计算网络末端的导数,然后向后工作,利用这些计算的冗余性。
当我们向后通过网络移动时,我们会发现大多数我们需要的项已经在前一步中计算过了,所以我们不需要重新计算它们。按照这种方式向后通过网络计算导数被称为反向传播。
反向传播的思想相对容易理解。然而,推导过程需要使用矩阵微积分,因为偏置和权重项分别是向量和矩阵。为了帮助理解其基本原理,下一节将推导一个具有标量参数的简单玩具模型的反向传播。然后我们将在第7.4节中将相同的方法应用于深度神经网络。
7.3 玩具示例 - Toy example
考虑一个具有八个标量参数$\phi = {β_{0}, ω_{0}, β_{1}, ω_{1}, β_{2}, ω_{2}, β_{3}, ω_{3}}
以及最小二乘损失函数
其中,$x_{i}
我们的目标是计算导数。
当然,我们可以手动找出这些导数的表达式并直接计算它们。然而,其中一些表达式非常复杂。例如,
这样的表达式很难推导和编码,容易出错,并且没有充分利用冗余性;请注意,三个指数项是相同的。
反向传播算法是一种同时计算所有这些导数的高效方法。它包括(i)前向传递,在其中我们计算并存储一系列中间值和网络输出,以及(ii)反向传递,在其中我们从网络的末端开始计算每个参数的导数,并在向起始点移动时重用先前的计算。

图7.3 反向传播的前向传递。我们依次计算并存储每个中间变量,直到最后计算损失。
前向传递: 我们将损失的计算视为一系列计算。
我们计算并存储中间变量$f_{k}
反向传播 #1: 现在我们按照相反的顺序计算
其中第一个导数很简单。
下一个导数可以使用链式法则计算:
左边问的是当

图 7.4 反向传播的第一次反向传递: 我们从计算损失的函数末尾开始反向计算导数
和 ,这些导数表示损失对中间量的变化。每个导数都是通过乘以形如 或 的项来计算的。
我们继续这样计算,计算输出与这些中间量的导数(图 7.4):
在每种情况下,我们已经在前一步中计算了括号中的量,而最后一项有一个简单的表达式。这些方程体现了前一节中的观察2(图 7.2);如果我们按相反的顺序计算它们,我们可以重用先前计算的导数。
反向传播 #2: 最后,我们考虑当我们改变参数
在每种情况下,右边的第二项在方程 7.12 中已经计算过。当

图 7.5 反向传播的第二次反向传递。最后,我们计算导数
和 。每个导数都是通过将 乘以相应的 或 计算得出的。
这与前一节中的观察1一致;权重
反向传播比单独计算导数(如方程 7.7)更简单且更高效。
7.4 反向传播算法 - Backpropagation algorithm
现在我们将这个过程重复一遍,针对一个三层网络(图7.1)。大部分的代数运算都是相同的,主要的区别在于中间变量$f_{k}, h_{k}
前向传播: 我们将网络写成一系列的顺序计算。
注意,我们实际上不需要计算损失对激活值的导数$\frac{\partial l_i}{\partial h_k} $。
在最终的反向传播算法中,我们不会显式地计算这些导数。
其中,$f_{k-1}
反向传播 #1: 现在让我们考虑当我们修改预激活值$f_{0}, f_{1}, f_{2}
右侧的三个项的大小分别为$D_{3} × D_{3}
类似地,我们可以计算当我们改变$f_{1}
注意,在每种情况下,括号中的项在前一步中已经计算过了。通过反向遍历网络,我们可以重复使用先前的计算。
此外,这些项本身是简单的。通过对方程7.17右侧进行反向遍历,我们有:
- 损失函数 $ℓ_{i} $对网络输出 $f_{3} $的导数 $∂ℓ_{i} /∂ f_{3} $会根据损失函数的不同而有不同的形式,但通常都很简单。
- 网络输出 $f_{3} $对隐藏层 $h_{3} $的导数 $∂f_{3} /∂ h_{3} $是。
如果你对矩阵微积分不熟悉,这个过程可能不好理解。它在问题7.6中有详细探讨。
激活函数输出 $h_{3} $对其输入 $f_{2} $的导数 $∂h_{3} /∂ f_{2} $会根据激活函数的不同而有所不同。它将是一个对角矩阵,因为每个激活函数只依赖于相应的预激活。对于ReLU函数,对角线上的元素在 $f_{2} $小于零的地方都是零,在其他地方都是一(图7.6)。我们不需要乘以这个矩阵,而是将对角线上的元素提取为向量 $\mathbb{I}[f_{2}> 0] $并逐元素相乘,这样更高效。

图7.6 ReLU函数的导数。ReLU函数(橙色曲线)在输入小于零时返回零,并在输入大于零时返回输入值。它的导数(青色曲线)在输入小于零时返回零(因为此处斜率为零),在输入大于零时返回1(因为此处斜率为1)。
方程7.18和7.19右侧的项具有类似的形式。当我们向后传播时,我们交替地(i)乘以权重矩阵的转置 $Ω_k^{T} $和(ii)基于输入 $f_{k-1} $到隐藏层的阈值。这些输入在前向传递过程中已经被存储起来。
向后传递 #2: 现在我们知道如何计算 $∂ℓ_{i} /∂ f_{k} $,我们可以专注于计算损失对权重和偏置的导数。为了计算损失对偏置 $β_{k} $的导数,我们再次使用链式法则。
类似地,权重向量 $Ω_{k} $的导数由以下公式给出。
从第二行到第三行的推导并不明显,在问题7.9中有详细探讨。然而,这个结果是有道理的。最后一行是一个与 $Ω_{k} $大小相同的矩阵。它线性地依赖于 $h_{k}
7.4.1 反向传播算法总结 - Backpropagation algorithm summary
现在我们简要总结一下最终的反向传播算法。考虑一个深度神经网络 $f [x_{i}, ϕ] $,它接受输入 $x_{i} $,有 $K $个带有ReLU激活函数的隐藏层,并且具有损失项 $ℓ_{i} = l [f [x_{i}, ϕ] , y_{i}] $。反向传播的目标是计算相对于偏置 $β_{k} $和权重 $Ω_{k} $的导数 $∂ℓ_{i} /∂ β_{k} $和 $∂ℓ_{i} /∂ Ω_{k} $。
**前向传播:**我们计算并存储以下量:
反向传播: 我们从损失函数 $ℓ_{i} $相对于网络输出 $f_{K} $的导数 $∂ℓ_{i} /∂ f_{K} $开始,然后向后逐层计算:
其中 ⊙ 表示逐元素乘法,$\mathbb{I} [f_{k-1}> 0] $是一个向量,其中 $f_{k-1} $大于零的位置为1,其他位置为零。最后,我们计算相对于第一组偏置和权重的导数:
我们对批次中的每个训练样本计算这些导数,并将它们相加以获得SGD更新的梯度。
需要注意的是,反向传播算法非常高效;前向传播和反向传播中最耗费计算资源的步骤是矩阵乘法(分别是 $Ω $和 $Ω^{T} $),只需要进行加法和乘法运算。然而,它不是内存高效的;前向传播中的中间值必须全部存储起来,这会限制我们能够训练的模型的最大规模。
7.4.2 算法微分 - Algorithmic differentiation
虽然了解反向传播算法很重要,但在实践中,你不太可能需要自己编写它。现代深度学习框架如PyTorch和TensorFlow可以根据模型规范自动计算导数,这就是所谓的算法微分。
框架中的每个功能组件(线性变换、ReLU激活函数、损失函数)都知道如何计算自己的导数。例如,PyTorch的ReLU函数 $z_{out} = relu[z_{in}] $知道如何计算其输出 $z_{out} $相对于其输入 $z_{in} $的导数。同样,线性函数 $z_{out} = β + Ωz_{in} $知道如何计算其输出 $z_{out} $相对于其输入 $z_{in} $和参数 $β
这些框架利用了现代图形处理单元(GPU)的大规模并行性。矩阵乘法等计算(在前向和后向传递中都有)自然适合并行化。此外,如果模型和前向传递中的中间结果不超过可用内存,还可以并行处理整个批次的前向和后向传递。
由于训练算法现在以并行方式处理整个批次,输入变成了多维张量。在这个上下文中,张量可以被视为将矩阵推广到任意维度的概念。因此,向量是一个1D张量,矩阵是一个2D张量,而3D张量是一个由数字组成的3D网格。到目前为止,训练数据是1D的,因此反向传播的输入将是一个2D张量,其中第一个维度索引批次元素,第二个维度索引数据维度。在后续章节中,我们将遇到更复杂的结构化输入数据。例如,在输入为RGB图像的模型中,原始数据示例是3D的(高度、宽度、通道)。在这种情况下,学习框架的输入将是一个4D张量,其中额外的维度索引批次元素。
7.4.3 将扩展到任意计算图 - Extension to arbitrary computational graphs
我们已经描述了在自然顺序下计算中间量 $f_{0}, h_{1}, f_{1}, h_{2},\ldots, f_{k} $的深度神经网络的反向传播。然而,模型不必局限于顺序计算。在本书的后面,我们将遇到具有分支结构的模型。例如,我们可以将隐藏层中的值通过两个不同的子网络进行处理,然后再合并。
幸运的是,如果计算图是无环的,反向传播的思想仍然适用。现代的算法微分框架如PyTorch和TensorFlow可以处理任意无环计算图。
7.5 参数初始化 - Parameter initialization
反向传播算法计算了用于随机梯度下降和Adam训练模型的导数。现在我们来讨论在开始训练之前如何初始化参数。为了理解为什么这一点至关重要,假设在前向传播过程中,每组预激活 $f_{k} $的计算方式为:
其中 $a [•]
- 如果方差 $σ^{2} $很小(例如
),那么 $β_{k} + Ω_{k}h_{k} $的每个元素将是 $h_{k} $的加权和,其中权重非常小;结果的幅值可能比输入要小。此外,ReLU函数会截断小于零的值,因此 $h_{k} $的范围将是 的一半。因此,随着网络的进一步进行,隐藏层的预激活幅值会越来越小。 - 如果方差 $σ^{2} $很大(例如
),那么 $β_{k} + Ω_{k}h_{k} $的每个元素将是 $h_{k} $的加权和,其中权重非常大;结果的幅值可能比输入要大得多。ReLU函数会将输入的范围减半,但如果 $σ^{2} $足够大,预激活的幅值仍然会随着网络的进一步进行而变大。
在这两种情况下,预激活的值可能变得非常小或非常大,以至于无法用有限精度的浮点运算来表示。
即使前向传播是可行的,相同的逻辑也适用于反向传播。每次梯度更新(方程7.24)都需要乘以 $Ω^{T} $。如果 $Ω $的值没有合理初始化,那么梯度幅值在反向传播过程中可能会不受控制地减小或增大。这些情况被称为梯度消失问题和梯度爆炸问题。在前一种情况下,模型的更新变得非常小。在后一种情况下,模型的更新变得不稳定。
7.5.1 前向传播的初始化 - Initialization for forward pass
我们现在给出同样论证的数学版本。考虑具有维度
其中,
假设输入层
中间值
其中,
利用这个结果,我们可以得到预激活
其中,我们使用了方差的恒等式
假设预激活
这反过来意味着,如果我们希望后续的预激活
其中
7.5.2 后向传播的初始化 - Initialization for backward pass
类似的论证可以得出在后向传播过程中梯度 $∂l/∂f_{k} $的方差如何变化。在后向传播过程中,我们乘以权重矩阵的转置 $Ω^{T} $(方程 7.24 ),因此等价表达式变为:
其中 $D_{h'} $是权重所输入的层的维度。
7.5.3 前向传播和后向传播的初始化 - Initialization for both forward and backward pass
如果权重矩阵 $Ω $不是方阵(即相邻两层的隐藏单元数不同,因此 $D_{h} $和 $D_{h'} $不同),那么不可能同时选择方差满足方程 7.31 和 7.32。一个可能的折中方案是使用平均值
图 7.7 实证了当参数适当初始化时,前向传播中隐藏单元的方差和后向传播中梯度的方差都保持稳定。

图7.7 权重初始化。考虑一个具有50个隐藏层和每层100个隐藏单元的深度网络。网络具有一个100维的输入
,从标准正态分布中初始化,一个固定的目标 ,和一个最小二乘损失函数。偏置向量 初始化为零,权重矩阵 使用均值为零,方差为 的正态分布进行初始化。
- a) 前向传播计算的隐藏单元激活方差作为网络层的函数。对于He初始化(
),方差保持稳定。然而,对于较大的值,方差迅速增加,对于较小的值,方差迅速减小(注意对数刻度)。 - b) 反向传递中梯度的方差(实线)延续了这个趋势;如果我们使用大于 0.02 的值进行初始化,梯度的大小在通过网络向后传播时会迅速增加。如果我们使用较小的值进行初始化,则梯度的大小会减小。这分别被称为梯度爆炸和梯度消失问题。
7.6 示例训练代码 - Example training code
本书的主要关注点是科学研究,而不是实现深度学习模型的指南。尽管如此,在图 7.8 中,我们提供了一个实现本书中所探讨的思想的PyTorch代码。该代码定义了一个神经网络并初始化权重。它创建了随机的输入和输出数据集,并定义了最小二乘损失函数。模型使用大小为10的批次,在100个周期内使用带有动量的SGD从数据中进行训练。学习率从0.01开始,每10个周期减半。
要点是,尽管深度学习的基本思想非常复杂,但实现起来相对简单。例如,反向传播的所有细节都隐藏在一行代码 loss.backward() 中。
import torch, torch.nn as nn
from torch.utils.data import TensorDataset, DataLoader
from torch.optim.lr_scheduler import StepLR
# 定义输入大小、隐藏层大小和输出大小
D_i, D_k, D_o = 10, 40, 5
# 创建具有两个隐藏层的模型
model = nn.Sequential(
nn.Linear(D_i, D_k),
nn.ReLU(),
nn.Linear(D_k, D_k),
nn.ReLU(),
nn.Linear(D_k, D_o))
# 使用He初始化权重
def weights_init(layer_in):
if isinstance(layer_in, nn.Linear):
nn.init.kaiming_uniform(layer_in.weight)
layer_in.bias.data.fill_(0.0)
model.apply(weights_init)
# 选择最小二乘损失函数
criterion = nn.MSELoss()
# 构建SGD优化器并初始化学习率和动量
optimizer = torch.optim.SGD(model.parameters(), lr = 0.1, momentum=0.9)
# 每10个epoch将学习率减半的对象
scheduler = StepLR(optimizer, step_size=10, gamma=0.5)
# 创建100个随机数据点并存储在数据加载器类中
x = torch.randn(100, D_i)
y = torch.randn(100, D_o)
data_loader = DataLoader(TensorDataset(x,y), batch_size=10, shuffle=True)
# 循环遍历数据集100次
for epoch in range(100):
epoch_loss = 0.0
# 遍历批次
for i, data in enumerate(data_loader):
# 获取此批次的输入和标签
x_batch, y_batch = data
# 将参数梯度置零
optimizer.zero_grad()
# 前向传递
pred = model(x_batch)
loss = criterion(pred, y_batch)
# 反向传递
loss.backward()
# SGD更新
optimizer.step()
# 更新统计数据
epoch_loss += loss.item()
# 打印错误
print(f'Epoch {epoch:5d}, loss {epoch_loss:.3f}')
# 告诉调度器考虑更新学习率
scheduler.step()
图7.8 在随机数据上训练两层网络的示例代码。
7.7 总结 - Summary
前一章介绍了随机梯度下降(SGD)算法,这是一种迭代优化算法,旨在找到函数的最小值。在神经网络的背景下,该算法可以找到使损失函数最小化的参数。SGD依赖于损失函数相对于参数的梯度,而这些梯度必须在进行优化之前定义一个初始化值。本章解决了深度神经网络中的这两个问题。
对于每个批次的每个参数成员,必须计算梯度,并在每个SGD迭代中进行计算。因此,梯度计算必须高效,为此引入了反向传播算法。同时参数初始化也是至关重要的。在前向传递中,隐藏单元激活的幅度可以呈指数级减少或增加。在反向传递中,梯度幅度也是如此,这些行为被称为梯度消失和梯度爆炸问题。这两个问题都会阻碍训练,但可以通过合适的初始化来避免。
我们现在已经定义了模型和损失函数,可以为给定的任务训练模型。下一章将讨论如何衡量模型的性能。
7.8 笔记 - Notes
反向传播: 在图计算领域计算梯度时,如何利用部分已经计算的值提高计算效率的方法已经被多次发现,包括Werbos(1974)、Bryson等人(1979)、LeCun(1985)和Parker(1985)。然而,对这一思想最著名的的描述是由Rumelhart等人(1985)和Rumelhart等人(1986)提出的,他们还创造了“反向传播”这个术语。这项工作开启了八九十年代神经网络研究的新阶段;首次实现了具有隐藏层的网络的训练。然而,由于缺乏训练数据、计算能力有限以及使用sigmoid激活函数,很快进展就停滞不前。直到Krizhevsky等人(2012)取得了引人注目的图像分类结果,自然语言处理和计算机视觉等领域才开始依赖神经网络模型,开启了深度学习的现代时代。
在PyTorch和TensorFlow等现代深度学习框架中实现的反向传播是反向模式算法微分的一个例子。这与正向模式算法微分不同,正向模式算法微分是在通过计算图向前移动时累积链式法则的导数(见问题7.13)。有关算法微分的更多信息,请参阅Griewank和Walther(2008)和Baydin等人(2018)。
初始化: He初始化首次由He等人(2015)引入。它与Glorot或Xavier初始化(Glorot和Bengio,2010)非常相似,但没有考虑ReLU层的影响,因此差异为两倍。LeCun等人(2012)在很早之前提出了基本相同的方法,但动机略有不同;在这种情况下,使用了S型激活函数,它自然地将每层输出的范围归一化,并有助于防止隐藏单元幅值的指数增长。然而,如果预激活值过大,它们会落入S型函数的平坦区域,导致梯度非常小。因此,合理初始化权重仍然很重要。Klambauer等人(2017)引入了缩放指数线性单元(SeLU),并表明在一定范围的输入下,该激活函数倾向于使网络层的激活自动收敛到零均值和单位方差。
完全不同的方法是将数据通过网络传递,然后通过经验观察到的方差进行归一化。层序单元方差初始化(Mishkin和Matas,2016)就是这种方法的一个例子,其中权重矩阵被初始化为正交的。GradInit(Zhu等人,2021)随机化初始权重,并在学习每个权重矩阵的非负缩放因子时暂时固定它们。这些因子被选择为在固定学习率下最大程度地减小损失,同时满足最大梯度范数的约束。激活归一化或ActNorm在每个隐藏单元的每个网络层之后添加一个可学习的缩放和偏移参数。他们通过网络运行一个初始批次,然后选择偏移和缩放,使得激活的均值为零,方差为一。之后,这些额外的参数作为模型的一部分进行学习。、
与这些方法密切相关的是一些方案,例如BatchNorm(Ioffe&Szegedy,2015),其中网络在每个步骤中将每个批次的方差标准化作为其处理的一部分。 BatchNorm及其变体在第11章中进行了讨论。针对特定架构还提出了其他初始化方案,包括卷积网络的 ConvolutionOrthogonal 初始化器(Xiao等,2018a),残差网络的Fixup(Zhang等,2019a),以及变压器的TFixup(Huang等,2020a)和DTFixup(Xu等,2021b)。
减少内存需求: 训练神经网络需要大量内存。在前向传递期间,我们必须存储模型参数和隐藏单元的预激活值。减少内存需求的两种方法是 gradient checkpointing(Chen等,2016a)和micro-batching(Huang等,2019)。在 gradient checkpointing 中,激活值仅在前向传递期间的每$N $层存储一次。在反向传递期间,从最近的检查点重新计算中间缺失的激活值。通过这种方式,我们可以大大减少计算内存需求,但需要付出两次前向传递的计算代价(问题7.11)。在micro-batching中,批次被细分为较小的部分,并且在应用于网络之前,从每个子批次中聚合梯度更新。完全不同的方法是构建可逆网络(例如Gomez等,2017),在这种网络中,可以从当前层的激活值计算出前一层的激活值,因此在前向传递期间不需要缓存任何内容(见第16章)。Sohoni等人(2019)回顾了减少内存需求的方法。
分布式训练: 对于足够大的模型,单个处理器的内存需求或总所需时间可能过多。在这种情况下,我们必须使用分布式训练,即在多个处理器之间并行进行训练。有几种并行性方法。在数据并行性中,每个处理器或节点包含模型的完整副本,但运行批次的子集(参见Xing等,2015; Li等,2020b)。来自每个节点的梯度被集中聚合,然后重新分发回每个节点,以确保模型保持一致。这被称为同步训练。聚合和重新分发梯度所需的同步可能成为性能瓶颈,这导致了异步训练的想法。例如,在Hogwild!算法(Recht等,2011)中,节点的梯度在准备好时用于更新中央模型。然后将更新后的模型重新分发给节点。这意味着每个节点在任何给定时间可能具有稍微不同的模型版本,因此梯度更新可能过时;然而,实践中效果很好。还开发了其他分散方案。例如,在Zhang等人(2016a)中,各个节点以环形结构相互更新。
数据并行方法仍然假设整个模型可以保存在单个节点的内存中。而流水线模型并行化将网络的不同层存储在不同的节点上,因此不需要这个要求。在一个简单的实现中,第一个节点在前几层上运行批处理的前向传递,并将结果传递给下一个节点,下一个节点在接下来的几层上运行前向传递,依此类推。在反向传递中,梯度按相反的顺序更新。这种方法的明显缺点是每个机器在大部分周期内处于空闲状态。为了减少这种低效性,已经提出了各种方案,其中每个节点按顺序处理微批次(例如,Huang et al. ,2019; Narayanan et al .,2021a )。最后,在张量模型并行化中,单个网络层的计算分布在节点之间(例如,Shoeybi et al .,2019 )。关于分布式训练方法的详细概述可以在Narayanan et al .(2021b)中找到,他们结合了张量、流水线和数据并行化,在3072个GPU上训练了一个拥有一万亿参数的语言模型。
7.9 问题 - Problems
问题 7.1 一个具有两个隐藏单元的两层网络可以定义为:
其中,函数
问题 7.2 在方程 7.12 的五个导数链中,找出每个链的最终项的表达式。
问题 7.3 方程 7.19 中的每个项的大小是多少?
问题 7.4 计算最小二乘损失函数的导数
问题 7.5 计算二分类损失函数的导数
其中,函数
问题 7.6∗ 证明对于 $z = β + Ωh $,有:
其中,
问题 7.7 考虑使用逻辑 sigmoid 函数(见方程 7.37)作为激活函数,即
问题 7.8 考虑使用(i)Heaviside 函数和(ii)矩形函数作为激活函数。
和
讨论为什么这些函数对于使用基于梯度的优化方法进行神经网络训练是有问题的。
问题 7.9∗ 考虑一个损失函数
问题 7.10∗ 推导使用 leaky ReLU 激活函数的反向传播算法的反向传递方程,其定义为:
其中,$α $是一个小的正常数(通常为0.1)。 问题7.11 考虑训练一个具有五十层的网络,我们只有足够的内存来存储每十个隐藏层的预激活值。请解释如何使用梯度检查点来计算这种情况下的导数。
问题7.12 这个问题探讨了在一般的非循环计算图上计算导数。考虑函数。
我们可以将其分解为一系列的中间计算,如下所示。
相关的计算图如图7.9所示。使用反向模式微分计算导数
在每种情况下使用链式法则利用已经计算出的导数。

问题7.13 对于问题7.42中的相同函数,使用正向模式微分计算导数
在每种情况下使用链式法则利用已经计算出的导数。为什么我们在计算深度网络的参数梯度时不使用正向模式微分。
问题7.14 考虑一个方差为
那么变换后的变量的二阶矩为
问题7.15 如果我们将网络中的所有权重和偏置初始化为零,你会预期会发生什么。
问题7.16 在PyTorch中实现图7.8中的代码,并将训练损失作为迭代次数的函数进行绘制。
问题7.17 修改图7.8中的代码,以解决一个二分类问题。你需要(i)将目标
本章目录
- 本章目录
- 第8章 测量性能 - Measuring performance
第8章 测量性能 - Measuring performance
前几章介绍了神经网络模型、损失函数和训练算法。本章将讨论如何测量训练模型的性能。具有足够容量(即隐藏单元的数量)的神经网络模型通常在训练数据上表现完美。然而,这并不一定意味着它能够很好地泛化到新的测试数据上。
在本章,我们会了解测试误差有三个明显的原因,它们的相对贡献取决于(i)任务固有的不确定性,(ii)训练数据的数量,以及(iii)模型的选择。后者的依赖性引发了超参数搜索的问题。我们将讨论如何选择模型的超参数(例如隐藏层的数量和每个隐藏层的隐藏单元数量)以及学习算法的超参数(例如学习率和批量大小)。
8.1 训练一个简单的模型 - Training a simple model
我们使用 MNIST-1D 数据集(图8.1)来探索模型的性能。该数据集包含十个类别
我们使用一个具有
然而,这并不意味着分类器是完美的;模型可能已经记住了训练集,但无法预测新的示例。为了估计真实的性能,我们需要一个单独的测试集,其中包含输入/输出对

图8.1 MNIST-1D。
测试损失(图 8.2b)在前 1500 个训练步骤中减小,但之后又开始增加。此时,测试错误率相对稳定;模型产生相同的错误,但置信度增加。这降低了正确答案的概率,从而增加了负对数似然。这种置信度增加是 softmax 函数的副作用;为了使训练数据的概率接近于 1(参见图 5.10),预 softmax 激活被推向越来越极端的值。

图8.2 MNIST-1D结果。
- a) 错误率作为训练步骤的函数。训练集的错误率降低到零,但测试集的错误率没有降低到40%以下。该模型在新的测试数据上的泛化能力不强。
- b) 损失作为训练步骤的函数。训练损失稳步减小至零。测试损失起初减小,但随后增加,因为模型对其(错误)预测的置信度越来越高。
8.2 误差的来源 - Sources of error
我们现在来考虑模型无法泛化时出现的误差来源。为了更容易理解,我们回到一个一维线性最小二乘回归问题,我们确切地知道地面真实数据是如何生成的。图8.3展示了一个准正弦函数;训练数据和测试数据都是通过在区间

图8.3 回归函数。实线表示真实函数。为了生成
个训练示例 ,输入空间 被分成 个相等的段,并在每个段内从均匀分布中抽取一个样本 。相应的值 通过在 处评估函数并添加高斯噪声来创建(灰色区域显示2个标准差)。测试数据以相同的方式生成。
我们将一个简化的浅层神经网络拟合到这些数据上(图8.4)。连接输入层和隐藏层的权重和偏置被选择得使得函数的“拐点”均匀分布在区间上。如果有$D $个隐藏单元,那么这些拐点将在

图8.4 简化的神经网络,有三个隐藏单元。
- a) 输入层和隐藏层之间的权重和偏置是固定的(虚线箭头)。
- b-d) 它们被选择得使得隐藏单元的激活具有斜率为1,并且它们的拐点在区间上均匀分布,拐点分别为$x = 0, x = 1/3
x = 2 / 3 ϕ = {β, ω_{1}, ω_{2}, ω_{3}} x ∈ [0, 1] $上具有拐点在 和 处的分段线性函数。 - e-g) 三个示例函数,具有不同的参数$ϕ $的值。
8.2.1 噪声、偏差和方差 - Noise, bias, and variance
存在三种可能的误差来源,分别称为噪声、偏差和方差(图8.5):
噪声 数据生成过程中包含噪声的添加,因此对于每个输入
噪声可能是由于数据生成过程中存在真正的随机元素,因为一些数据被错误标记,或者因为存在未观察到的进一步解释变量。在罕见的情况下,噪声可能不存在;例如,一个网络可能近似一个确定性函数,但需要大量计算才能评估。然而,噪声通常是可能的测试性能的根本限制。
偏差 第二个潜在的误差来源可能是因为模型不够灵活,无法完美地拟合真实函数。例如,三区域神经网络模型无法精确描述准正弦函数,即使参数选择最佳(图8.5b)。这被称为偏差。
方差 我们有限的训练样本,无法区分基础函数中的系统变化和基础数据中的噪声。当我们拟合一个模型时,我们无法得到对真实基础函数的最接近的近似。实际上,对于不同的训练数据集,结果每次都会稍有不同。拟合函数中的这种额外的变异性被称为方差(图8.5c)。在实践中,由于随机学习算法的存在,可能还会有额外的方差,这些算法不一定每次都收敛到相同的解。

图8.5 测试误差的来源。
- a) 噪声。数据生成是有噪声的,所以即使模型完全复制了真实的基础函数(黑线),测试数据中的噪声(灰色点)意味着仍然会存在一些误差(灰色区域表示两个标准差)。
- b) 偏差。即使具有最佳参数,三区域模型(青色线)也无法完全拟合真实函数(黑线)。这种偏差是另一种误差来源(灰色区域表示有符号误差)。
- c) 方差。在实践中,我们只有有限的带噪声的训练数据(橙色点)。当我们拟合模型时,我们不能从面板(b)中恢复出最佳的函数,而是得到一个略有不同的函数(青色线),它反映了训练数据的特殊性。这提供了额外的误差来源(灰色区域表示两个标准差)。图8.6展示了如何计算这个区域。
8.2.2 测试误差的数学表达式 - Mathematical formulation of test error
我们现在将噪声、偏差和方差的概念数学化。考虑一个一维回归问题,数据生成过程中存在方差为
并且固定噪声
现在考虑在位置
在第二行中,我们在平方项中添加和减去了基础函数的均值
基础函数是随机的,因此这个损失取决于我们观察到的特定
我们利用期望的运算法则。在第二行中,我们展开了期望算子,并将其中不依赖于
第一项可以进一步分为偏差和方差。模型
回到方程8.3的第一项,我们添加和减去
然后,我们对训练数据集
在这里,我们使用了与方程8.3类似的步骤进行简化。最后,我们将这个结果代入方程8.3。
8.3 减少误差 - Reducing error
在前一节中,我们看到测试误差由三个来源造成:噪声、偏差和方差。噪声部分是必然存在的,我们无法绕过它,它代表了模型性能的基本限制。然而,我们可以减少其他两个项。
8.3.1 减少方差 - Reducing variance
回想一下,方差是由有限的噪声训练数据引起的。将模型拟合到两个不同的训练集会得到略有不同的参数。因此,我们可以通过增加训练数据的数量来减少方差。这样可以平均掉固有的噪声,并确保输入空间得到充分采样。
图8.6显示了使用6、10和100个样本进行训练的效果。对于每个数据集大小,我们展示了三个训练数据集的最佳拟合模型。只有六个样本时,每次拟合的函数都非常不同:方差很大。随着样本数量的增加,拟合模型变得非常相似,方差减小。通常情况下,增加训练数据几乎总是能提高测试性能。

图8.6 通过增加训练数据减少方差。
- a-c) 将三区域模型拟合到三个不同的随机抽样的六个点的数据集上。每次拟合的模型都有很大的不同。
- d) 我们重复这个实验多次,并绘制平均模型预测(青色线)和模型预测的方差(灰色区域显示两个标准差)。
- e-h) 我们进行相同的实验,但这次使用大小为十的数据集。预测的方差减小了。
- i-l) 我们使用大小为100的数据集重复这个实验。现在拟合的模型总是相似的,方差很小。
8.3.2 减少偏差 - Reducing bias
偏差项是由模型无法描述真实的基础函数引起的。这表明我们可以通过使模型更加灵活来减少这种误差。通常情况下,这是通过增加模型的容量来实现的。对于神经网络来说,这意味着增加更多的隐藏单元或隐藏层。
在简化模型中,增加容量相当于增加更多的隐藏单元,使区间

图8.7 偏差和方差作为模型容量的函数。
- a-c) 随着玩具模型的隐藏单元数量增加,线性区域的数量增加,模型能够紧密拟合真实函数;偏差(灰色区域)减小。
- d-f) 不幸的是,增加模型容量会增加方差项(灰色区域)。这被称为偏差-方差权衡。
8.3.3 偏差-方差权衡 - Bias-variance trade-off
然而,图8.7d-f显示了增加模型容量的一个意外副作用。对于一个固定大小的训练数据集,方差项随着模型容量的增加而增加。因此,增加模型容量并不一定能减少测试误差。这被称为偏差-方差权衡。
图8.8探讨了这一现象。
- 在面板a-c)中,我们将简化的三区域模型拟合到三个不同的包含十五个点的数据集上。尽管数据集不同,最终的模型基本相同;数据集中的噪声在每个线性区域中大致平均。
- 在面板d-f)中,我们将一个具有十个区域的模型拟合到相同的三个数据集上。这个模型具有更大的灵活性,但这是不利的;模型确实更好地拟合了数据,训练误差会更低,但额外的描述能力大部分用于建模噪声。这种现象被称为过拟合。

图 8.8 过拟合。
- a-c) 将一个具有三个区域的模型拟合到三个不同的包含十五个数据点的数据集上。在这三种情况下的结果都相似(即方差较低)。
- d-f) 将一个具有十个区域的模型拟合到相同的数据集上。额外的灵活性并不一定会产生更好的预测结果。虽然这三个模型每个都能更好地描述训练数据,但它们并不一定更接近真实的基础函数(黑色曲线)。相反,它们过度拟合了数据,描述了噪声,并且方差(拟合曲线之间的差异)较大。
我们已经看到,对于一个固定大小的训练数据集,随着模型容量的增加,偏差会减小,但方差会增加。这表明存在一个最佳容量,其中偏差不会太大,方差仍然相对较小。
图8.9显示了当我们增加容量时,这些项在玩具模型中的数值变化,使用了图8.8中的数据。对于回归模型,总期望误差是偏差和方差的总和,当模型容量为四时(即四个隐藏单元和四个线性区域),这个总和最小。

图8.9 偏差-方差权衡。根据方程8.7中的偏差和方差项,绘制了在简化模型中使用来自图8.8的训练数据的模型容量(隐藏单元/线性区域数量)的函数。随着容量的增加,偏差(实线橙色线)减小,但方差(实线青色线)增加。当容量为四时,这两个项的和(虚线灰色线)最小化。
8.4 双下降 - Double descent
在前一节中,我们研究了模型容量增加时的偏差-方差权衡。现在让我们回到MNIST-1D数据集,看看这在实践中是否发生。我们使用10,000个训练样本,在另外5,000个样本上进行测试,并在模型中增加容量(参数数量)时检查训练和测试性能。我们使用Adam优化器和学习率为0.005,在4000个步骤中使用10,000个样本的完整批次进行训练。
图8.10a显示了一个具有两个隐藏层的神经网络的训练和测试误差随隐藏单元数量增加的情况。随着容量的增加,训练误差减小并迅速接近零。垂直虚线表示模型具有与训练样本数量相同的参数数量的容量,但在此之前,模型已经记住了数据集。随着我们增加模型容量,测试误差减小,但并没有像偏差-方差权衡曲线预测的那样增加;它继续减小。
在图8.10b中,我们重复了这个实验,但这次我们随机化了15%的训练标签。同样,训练误差减小到零。这次有更多的随机性,模型需要几乎与数据点数量相同的参数来记住数据。测试误差确实显示了典型的偏差-方差权衡,随着容量增加,直到模型完全拟合训练数据。然而,然后它做了一些意外的事情;它开始再次减小。事实上,如果我们增加足够的容量,测试损失会降低到低于曲线的第一部分达到的最小水平。
这种现象被称为双下降。对于一些数据集,如MNIST,使用原始数据就可以出现这种现象(图8.10c)。对于其他数据集,如MNIST-1D和CIFAR-100(图8.10d),当我们给标签添加噪声时,这种现象就会出现或变得更加突出。
曲线的第一部分被称为经典或欠参数化区域,第二部分被称为现代或过参数化区域。误差增加的中间部分被称为临界区域。

图8.10 双下降。
- a) 在MNIST-1D上,对于一个具有两个隐藏层的网络,随着每层隐藏单元(因此参数)的数量增加,训练和测试损失。当参数的数量接近训练示例的数量(垂直虚线)时,训练损失减少到零。测试误差没有显示预期的偏差-方差权衡,而是在模型记住数据集之后继续减小。
- b) 在训练数据更加嘈杂的情况下重复相同的实验。同样,训练误差减少到零,尽管现在需要几乎与训练点一样多的参数来记住数据集。测试误差显示了预测的偏差/方差权衡;随着容量的增加,它减小,但在接近训练数据完全记住的点附近再次增加。然而,它随后再次减小,并最终达到更好的性能水平。这被称为双下降。根据损失、模型和数据中的噪声量,双下降模式在许多数据集上可以以不同程度地观察到。
- c) 来自Belkin et al的浅层神经网络在MNIST上的结果。(2019 )。
- d) 来自Nakkiran et al的ResNet18网络在CIFAR-100上的结果。详细信息请参见原始论文。
8.4.1 解释 - Explanation
双下降的发现是最近的、出乎意料的,也有些令人困惑。它是两个现象的相互作用的结果。
- 首先,当模型的容量刚好足够记住数据时,测试性能会暂时变差。
- 其次,即使训练性能完美,测试性能仍然随着容量的增加而继续提高。
第一个现象正如偏差-方差权衡所预测的那样。第二个现象却令人困惑,在过参数化的情况下,性能为什么应该更好,因为在这种情况下甚至没有足够的训练数据点来唯一约束模型参数。
为了理解为什么随着添加更多参数,性能会继续提高,需要注意一旦模型具有足够的容量将训练损失几乎降至零,模型几乎完美地拟合了训练数据。这意味着进一步增加的容量不能帮助模型更好地拟合训练数据;任何变化都必须发生在训练点之间。模型在数据点之间外推时优先选择一种解决方案而不是另一种解决方案的倾向被称为其归纳偏差。
模型在数据点之间的行为是关键的,因为在高维空间中,训练数据非常稀疏。MNIST-1D数据集有40个维度,我们使用了1万个示例进行训练。如果这看起来是足够的数据,考虑一下如果我们将每个输入维度量化为10个区间,会发生什么。总共将有$10^{40} $个区间,仅由$10^{5} $个示例约束。即使进行这种粗糙的量化,每$10^{35} $个区间中只有一个数据点!高维空间的体积倾向于压倒训练点的数量,这被称为维度灾难。
这意味着在高维问题中,可能会更像图8.11a中所示,输入空间的小区域之间存在着显著的间隔。对于“双下降”的假设解释是随着我们增加模型的容量,它在最近的数据点之间插值的平滑程度越来越高。在缺乏关于训练点之间发生的情况的信息时,假设平滑性是合理的,并且很可能对新数据进行合理的泛化。

图8.11 增加容量(隐藏单元)允许在稀疏数据点之间进行更平滑的插值。
- a) 考虑这样一种情况,训练数据(橙色圆圈)是稀疏的;中心区域没有数据示例来约束模型模仿真实函数(黑色曲线)。
- b) 如果我们使用足够的容量来拟合训练数据(青色曲线),那么模型必须扭曲自己以通过训练数据,输出的预测将不会是平滑的。
- c-f) 然而,当我们增加隐藏单元时,模型有能力在数据点之间进行更平滑的插值(每种情况下绘制的最平滑曲线)。然而,与此图中不同,它并不是必须这样做。
这个论点是有道理的。显然,随着我们增加模型的容量,它将有能力创建更平滑的函数。图[8.11b-f]展示了随着隐藏单元数量的增加,仍然通过数据点的最平滑函数。当参数的数量非常接近训练数据示例的数量(图[8.11b]),模型被迫扭曲自己以完全拟合训练数据,导致预测结果不稳定。这解释了为什么双下降曲线中的峰值如此明显。随着我们增加隐藏单元,模型有能力构建更平滑的函数,这些函数很可能对新数据具有更好的泛化能力。
然而,这并不能解释为什么过参数化的模型应该产生平滑的函数。图[8.12]展示了由具有50个隐藏单元的简化模型创建的三个函数。在每种情况下,模型完全拟合数据,因此损失为零。如果过参数化双下降现象是由于增加平滑性而解释的,那么到底是什么促使了这种平滑性呢?

图8.12 正则化。
- a-c) 这三条拟合曲线都恰好通过数据点,所以每条曲线的训练损失为零。然而,我们可以预期,面板(a)中的平滑曲线在泛化到新数据时比面板(b)和(c)中的不稳定曲线更好。任何使模型偏向具有类似训练损失子集的因素都被称为正则化器。人们认为,神经网络的初始化和/或拟合具有隐式的正则化效果。因此,在过参数化的情况下,会鼓励出现更合理的解,比如面板(a)中的解。
这个问题的答案尚不确定,但有两种可能性。首先,网络初始化可能会鼓励平滑性,并且模型在训练过程中从未偏离平滑函数的子域。其次,训练算法可能以某种方式“偏好”收敛到平滑函数。任何偏向于等效解集合的因素都被称为正则化器,因此一种可能性是训练算法作为隐式正则化器(见第[9.2]节)起作用。
8.5 选择超参数 - Choosing hyperparameters
在前一节中,我们讨论了模型容量对测试性能的影响。不幸的是,在欠参数化的情况下,我们既无法获得偏差(需要了解真实的基础函数),也无法获得方差(需要多次独立采样的数据集来估计)。在过参数化情况下,我们无法确定在测试误差停止改进之前应该添加多少容量。这引发了一个问题,即在实践中应该如何选择模型容量。
对于深度网络,模型容量取决于隐藏层的数量、每层的隐藏单元数量以及我们尚未介绍的架构的其他方面。此外,学习算法的选择和任何相关参数(学习率等)也会影响测试性能。这些元素统称为超参数。寻找最佳超参数的过程称为超参数搜索,或者(当专注于网络结构时)神经架构搜索。
通常情况下,超参数是通过经验选择的;我们在相同的训练集上使用不同的超参数训练多个模型,测量它们的性能,并保留最佳模型。然而,我们不会在测试集上测量它们的性能;这可能会导致这些超参数恰好适用于测试集,但不能泛化到其他数据。相反,我们引入一个称为验证集的第三个数据集。对于每个超参数的选择,我们使用训练集训练相应的模型,并在验证集上评估性能。最后,我们选择在验证集上表现最好的模型,并在测试集上测量其性能。原则上,这应该给出一个合理的真实性能估计。
超参数空间通常比参数空间小,但仍然太大,无法穷举尝试每种组合。不幸的是,许多超参数是离散的(例如,隐藏层的数量),而其他超参数可能是相互条件的(例如,只有在存在十个或更多层时,我们才需要指定第十个隐藏层中的隐藏单元数量)。因此,我们不能像学习模型参数那样依赖于梯度下降方法。超参数优化算法会智能地对超参数空间进行采样,取决于先前的结果。由于我们必须为每个超参数组合训练整个模型并测量验证性能,所以这个过程计算上是昂贵的。
8.6 总结 - Summary
为了衡量性能,我们使用一个单独的测试集。在这个测试集上保持性能的程度被称为泛化能力。测试误差可以通过三个因素来解释:噪声、偏差和方差。在最小二乘损失的回归问题中,它们以加法的方式组合。增加训练数据可以减少方差。当模型容量小于训练样本数量时,增加容量会减少偏差但增加方差。这被称为偏差-方差权衡,存在一个容量使得权衡最优。
然而,这与容量增加时性能改善的趋势相平衡,即使参数超过训练样本。这两个现象共同构成了双下降曲线。人们认为,在过参数化的“过参数化情况”下,模型在训练数据点之间的插值更加平滑,尽管目前尚不清楚是什么驱动了这一点。为了选择出较优的容量和其他模型和训练算法的超参数,我们可以拟合多个模型,并使用一个单独的验证集评估它们的性能。
8.7 注意事项 - Notes
偏差-方差权衡: 我们已经证明了使用最小二乘损失函数的回归问题的测试误差可以分解为噪声、偏差和方差三个项的和。这些因素在使用其他损失函数的模型中也存在,但它们的相互作用通常更加复杂(Friedman, 1997; Domingos, 2000)。对于分类问题,有一些反直觉的预测;例如,如果模型在输入空间的某个区域中偏向于选择错误的类别,增加方差可以提高分类率,因为这会将一些预测推到阈值以上以正确分类。
交叉验证: 我们看到,将数据分为三部分是常见的做法:训练数据(用于学习模型参数)、验证数据(用于选择超参数)和测试数据(用于估计最终性能)。这种方法被称为交叉验证。然而,这种划分可能会在数据示例总数有限的情况下引起问题;如果训练示例的数量与模型容量相当,那么方差将会很大。
缓解这个问题的一种方法是使用K折交叉验证。训练和验证数据被划分为K个不相交的子集。例如,我们可以将这些数据分为五个部分。我们对五个排列中的每一个使用四个进行训练,用第五个进行验证,并根据平均验证性能选择超参数。最终的测试性能是使用具有最佳超参数的五个模型的预测的平均值在完全不同的测试集上评估的。这个想法有很多变种,但它们有一个共同的目标,即使用更大比例的数据来训练模型,从而减少方差。
容量: 我们在非正式地使用术语“容量”来表示模型中的参数或隐藏单元的数量(因此间接地表示模型适应递增复杂性函数的能力)。当我们考虑到优化算法可能无法达到所有这些解时,剩下的是“有效容量”。
Vapnik-Chervonenkis(VC)维度是容量的一个更正式的度量。它是一个二元分类器可以任意标记的最大训练示例数。Bartlett等人(2019)根据层数和权重的数量推导出VC维度的上下界。容量的另一种度量是Rademacher复杂度,它是分类模型(具有最优参数)对具有随机标签的数据的期望经验性能。Neyshabur等人(2017)根据Rademacher复杂度推导出广义误差的下界。
双下降: “双下降”一词是由Belkin等人(2019)创造的,他们证明了对于两层神经网络和随机特征,测试误差在过参数化的情况下再次下降。他们还声称这种现象在决策树中也发生,尽管Buschjäger和Morik(2021)随后提供了相反的证据。Nakkiran等人(2021)表明双下降现象在各种过参数化数据集(CIFAR-10、CIFAR-100、IWSLT'14 de-en)、架构(CNNs、ResNets、transformers)和优化器(SGD、Adam)中都存在。当目标标签添加噪声(Nakkiran等人,2021)或使用一些正则化技术(Ishida等人,2020)时,这种现象更加明显。 Nakkiran等人(2021)还提供了实证证据,测试性能取决于有效模型容量(给定模型和训练方法可以实现零训练误差的最大样本数)。在这一点上,模型开始致力于平滑插值。因此,测试性能不仅取决于模型,还取决于训练算法和训练时长。当他们研究具有固定容量并增加训练迭代次数的模型时,他们观察到了相同的模式。他们将这种现象称为逐个epoch的双下降。Pezeshki等人(2022)以模型中不同特征以不同速度学习的方式对这一现象进行了建模。
双下降现象有一个相当奇怪的预测,即增加训练数据有时可能会导致测试性能变差。考虑一个在曲线的第二个下降部分的过参数化模型。如果我们增加训练数据以匹配模型容量,我们现在将处于新的测试误差曲线的临界区域,测试损失可能会增加。
Bubeck和Sellke(2021)证明了过参数化对于在高维空间中平滑插值数据是必要的。他们展示了参数数量和模型的Lipschitz常数(输出对于小的输入变化的最快变化速度)之间的权衡。关于过参数化机器学习理论的综述可以在Dar等人(2021)中找到。
维度诅咒: 随着维度的增加,空间的体积增长得非常快,以至于需要密集采样所需的数据量呈指数增长。这种现象被称为维度诅咒。高维空间具有许多意想不到的特性,因此在基于低维示例进行推理时应谨慎。本书在一维或二维空间中可视化了深度学习的许多方面,但对于这些可视化结果应该持有合理的怀疑态度。
高维空间的一些令人惊讶的特性包括:
- (i)从标准正态分布中随机抽取的两个数据点在原点相对于彼此非常接近(正交)的概率很高。
- (ii)从标准正态分布中抽取的样本到原点的距离大致是恒定的。
- (iii)高维球体(超球体)的大部分体积与其表面相邻(一个常见的比喻是高维橙子的大部分体积在皮中,而不在果肉中)。
- (iv)如果我们将一个单位直径的超球体放入边长为单位长度的超立方体中,那么随着维度的增加,超球体占据的立方体体积比例逐渐减小。由于立方体的体积固定为一,这意味着高维超球体的体积接近于零。
- (v)对于从高维超立方体中均匀分布的随机点,最近点和最远点之间的欧氏距离的比值接近于一。有关更多信息,请参阅Beyer等人(1999)和Aggarwal等人(2001)。
现实世界的性能: 在本章中,我们认为可以使用保留的测试集来评估模型性能。然而,如果测试集的统计数据与现实世界的数据不匹配,结果将无法反映出真实世界的性能。此外,现实世界数据的统计特性可能会随时间变化,导致模型变得越来越陈旧,性能下降。这被称为数据漂移,意味着部署的模型必须仔细监控。
真实世界性能与测试性能之间存在三个主要原因导致真实世界性能可能比测试性能表明的要差。
- 首先,输入数据
的统计特性可能会发生变化;在训练期间,我们可能没有对函数的某些部分进行充分采样或根本没有采样。这被称为协变量偏移。 - 其次,输出数据
的统计特性可能会发生变化;如果某些输出值在训练期间很少出现,那么模型可能会学习在模糊情况下不预测这些值,并且如果它们在真实世界中更常见,就会出现错误。这被称为先验偏移。 - 第三,输入和输出之间的关系可能会发生变化。这被称为概念偏移。这些问题在Moreno-Torres et al(2012)中进行了讨论。
超参数搜索: 寻找最佳超参数是一项具有挑战性的优化任务。测试单个超参数配置是昂贵的;我们必须训练整个模型并测量其性能。我们没有简单的方法来获取导数(即当我们对超参数进行微小改变时性能如何变化)。此外,许多超参数是离散的,因此我们无法使用梯度下降方法。存在多个局部最小值,无法确定我们是否接近全局最小值。噪声水平很高,因为每个训练/验证周期都使用随机训练算法;如果我们使用相同的超参数训练模型两次,我们预期会得到不同的结果。最后,某些变量是条件的,只有在设置其他变量时才存在。例如,第三个隐藏层中的隐藏单元数仅在至少有三个隐藏层时才相关。
一种简单的方法是随机采样空间(Bergstra & Bengio,2012)。然而,对于连续变量,最好建立一个性能模型,将其作为超参数和该函数的不确定性的函数。这可以用来测试不确定性很大的地方(探索空间)或者集中在性能看起来有希望的区域(利用先前的知识)。贝叶斯优化是一种基于高斯过程的框架,正是这样做的,其在超参数搜索中的应用在Snoek et al(2012)中有描述。Beta-Bernoulli赌博机(参见Lattimore & Szepesvári,2020)是描述由离散变量引起的结果不确定性的大致等效模型。
顺序模型配置(SMAC)算法(Hutter et al,2011)可以处理连续、离散和条件参数。基本方法是使用随机森林来建模目标函数,其中树预测的均值是关于目标函数的最佳猜测,它们的方差表示不确定性。另一种完全不同的方法,也可以处理连续、离散和条件参数的组合,是Tree-Parzen估计器(Bergstra et al.,2011)。前面的方法建模了给定超参数的模型性能的概率。相比之下,Tree-Parzen估计器建模了给定模型性能的超参数的概率。 超带(Hyperband)是一种用于超参数优化的多臂赌博策略。它假设存在计算成本较低但近似测量性能的方法(例如,不完全训练)并且可以将其与预算关联起来(例如,通过固定迭代次数进行训练)。首先,随机抽样一些配置并运行,直到预算用完。然后保留最好的一部分运行结果,并将预算乘以1/η。重复此过程直到达到最大预算。这种方法的优点是高效;对于糟糕的配置,它不需要将实验运行到最后。然而,每个样本只是随机选择的,这是低效的。BOHB算法(Falkner等人,2018)将超带的效率与来自树Parzen估计器的更明智的超参数选择相结合,构建了一种更好的方法。
Hyperband(Li et al.,2017b)是一种用于超参数优化的多臂赌博策略。它假设存在计算廉价但近似衡量性能的方法(例如,不完全训练)并且这些方法可以与预算相关联(例如,通过固定迭代次数进行训练)。首先,随机采样一些配置并运行直到预算用尽。然后保留最佳比例
8.8 问题 - Problems
问题 8.1 在图8.2中,多类交叉熵训练损失是否会达到零?请解释你的理由。
问题 8.2 在图8.4a中的模型的第一层中,我们应该选择哪些权重和偏置的值,以使隐藏单元的响应如图8.4b-d所示?
问题 8.3 给定一个训练数据集,包含 $I $个输入/输出对 ${x_{i}, y_{i}} $,请展示如何使用最小二乘损失函数在图8.4a中找到模型的参数
问题 8.4 考虑图8.10b中的曲线,在训练一个具有200个隐藏单元的模型时,该模型将具有50,410个参数。如果我们将训练样本的数量从10,000增加到50,410,你预测训练和测试性能会发生什么变化?
问题 8.5 考虑模型容量超过训练数据点数量的情况,并且模型足够灵活以将训练损失减少到零。这对于拟合异方差模型有什么影响?请提出一种解决你所确定的任何问题的方法。
问题 8.6 证明从一个1000维标准高斯分布中随机抽取的两个点在原点处是正交的,概率很高。
问题 8.7 在 $D $维空间中,半径为 $r $的超球体的体积为:
其中
问题 8.8∗ 考虑一个半径为 $r = 1 $的超球体。找出总体积中位于距离中心最外层 1% 的比例的表达式(即厚度为 0.01 的最外层壳)。证明当维度增加时,这个比例将变为一。
问题 8.9 图8.13c显示了随着维度的增加,标准正态分布样本的距离分布。通过从25、100和500维的标准正态分布中进行抽样,并绘制距离中心的直方图,来经验性地验证这一发现。哪种闭合形式的概率分布描述了这些距离?

图8.13 典型集合。
- a) 二维标准正态分布。圆圈是从该分布中抽取的四个样本。随着距离中心的增加,概率减小,但在该半径处的空间体积(即相邻均匀圆之间的面积)增加。
- b) 这些因素相互权衡,使得样本距离中心的直方图具有明显的峰值。
- c) 在更高维度中,这种效应变得更加极端,观察到的样本接近均值的概率变得非常小。虽然最可能的点在分布的均值处,但典型样本位于一个相对较窄的壳中。
- 第九章 正则化 - Regularization
第九章 正则化 - Regularization
第八章描述了如何衡量模型性能,并指出训练数据和测试数据之间可能存在显著的性能差距。造成这种差异的可能原因包括:
- (i)模型描述了训练数据的统计特点,但这些特点并不代表从输入到输出的真实映射关系(过拟合);
- (ii)模型在没有训练样本的区域没有约束,导致预测结果不够优化。
本章将讨论正则化技术。这是一组方法,用于减小训练和测试性能之间的泛化差距。严格来说,正则化是指向损失函数中添加明确项,有利于某些参数选择。然而,在机器学习中,这个术语通常用于指任何改进泛化性能的策略。
首先,我们讨论了严格意义上的正则化。然后我们展示了随机梯度下降算法本身如何倾向于某些解决方案,这被称为隐式正则化。接下来,我们介绍了一组启发式方法,用于改善测试性能。这包括提前停止、集成、随机失活、标签平滑和迁移学习。
9.1 显式正则化 - Explicit regularization
考虑在使用训练集
这里,每一个独立的项
这里的

图 9.1 显式正则化。
- a) Gabor模型的损失函数(详见第 6.1.2 节)。青色的圆圈代表着局部最小值,灰色的圆圈则代表全局最小值。
- b) 正则化项偏向于选择接近图的中心的参数,当我们离这个点越远,施加的惩罚就越大。
- c) 最终的损失函数是原始损失函数和正则化项的总和。这个结果的特点是局部最小值较少,而全局最小值则已经移动到了另一个位置(箭头表示移动的方向)。
9.1.1 概率解释 - Probabilistic interpretation
正则化可以从概率的角度来理解。5.1节展示了如何从最大似然准则构建损失函数:
正则化项可以被看作是一个先验
通过取对数并乘以负1,将其转换回负对数似然损失函数,我们可以看到
9.1.2 L2 正则化 - L2 regularization
这里讨论的问题是正则化项应该对哪些解进行惩罚(或者等效地说是先验应该偏向哪些解)。由于神经网络应用的广泛性,只能提出一些非常一般性的偏好。最常用的正则化项是 L2 范数,它对参数值的平方和进行惩罚:
其中
对于神经网络,L2 正则化通常应用于权重而不是偏差,因此通常被称为 权重衰减 项。其效果是鼓励较小的权重,使得输出函数更平滑。为了理解这一点,我们可以考虑输出预测是最后一个隐藏层激活的加权和。如果 L2 正则化权重的幅度较小,输出将变化较小。同样的逻辑也适用于在最后一个隐藏层计算预激活的情况,以此类推,一直到网络的反向过程。在极端情况下,如果我们强制所有权重为零,网络将产生由最后一个偏差参数决定的常数输出。
图 9.2 显示了在权重衰减和不同的正则化系数
- 如果网络过拟合,那么添加正则化项意味着网络必须在严格遵循数据和期望平滑之间做出权衡。一种理解这个问题的方式是,由于方差引起的误差减少(模型不再需要通过每一个数据点)的代价是偏差增加(模型只能描述平滑的函数)。
- 当网络过度参数化时,额外的模型容量描述的是没有训练数据的区域。在这种情况下,正则化项将偏好于在附近点之间平滑插值的函数。在没有关于真实函数的知识的情况下,这是合理的行为。

图 9.2 简化网络中的 L2 正则化(见图 8.4 )。
- a-f) 随着我们增加正则化系数
,拟合函数。黑色曲线是真实函数,橙色圆点是有噪声的训练数据,青色曲线是拟合模型。对于小的 (面板 a-b),拟合函数完全通过数据点。对于中等的 (面板 c-d),函数更平滑,更接近真实值。对于大的 (面板 e-f),拟合函数比真实值更平滑,所以拟合效果变差。
9.2 隐式正则化 - Implicit regularization
最近一个有趣的发现是,梯度下降和随机梯度下降在朝着损失函数的最小值的方向上并不是中立的;它们各自对某些解具有偏好。这被称为 隐式正则化。
9.2.1 梯度下降中的隐式正则化 - Implicit regularization in gradient descent
考虑梯度下降的一个连续版本,它的步长无限小,那么参数
梯度下降使用离散的步长
离散化导致了与连续路径的偏差(图 9.3 )。

图 9.3 梯度下降中的隐式正则化。
- a)具有一族全局最小值的损失函数,水平线上的
。虚线表示起点在左下方的连续梯度下降路径。青色轨迹表示离散梯度下降,步长为 0.1(显示了前几步) 。有限的步长导致路径分离,并达到不同的最终位置。 - b)可以通过在连续梯度下降损失函数中添加一个惩罚平方梯度大小的正则化项来近似这种差异。
- c)在添加了这个项之后,连续梯度下降路径收敛到离散路径在原始函数上的相同位置。
可以通过推导出一个修改后的连续损失项
简单来说,离散轨迹会避开梯度较大(也就是表面更为陡峭)的区域。这并不会改变梯度为零的最低点的位置。但是,这会改变其他地方的实际损失函数,并且调整优化的路径,这可能会使结果收敛到另一个最低点。全批量梯度下降在更大步长下表现出更好的泛化性,这可能是因为梯度下降引入的隐式正则化的影响(见图 9.5a)。
9.2.2 隐式正则化在随机梯度下降中的作用 - Implicit regularization in stochastic gradient descent
对于随机梯度下降(SGD),我们同样可以进行类似的分析。现在我们寻求一种修改后的损失函数,使得连续版本的损失函数达到与可能的随机SGD更新的平均值相同的位置。可以证明如下:
在公式中,
公式9.9揭示了一个额外的正则化项,该项对应于批次损失
图 9.4 随机梯度下降的隐式正则化。
- a)Gabor 模型(第 6.1.2 节)的原始损失函数。
- b)梯度下降中的隐式正则化项惩罚了平方梯度大小。
- c)随机梯度下降中的额外隐式正则化惩罚了批量梯度的方差。
- d)修改后的损失函数(原始损失加上两个隐式正则化成分之和)。
SGD比梯度下降更好地泛化,并且较小的批次大小通常比较大的批次大小表现更好(图9.5b)。其中一个可能的解释是内在的随机性使得算法能够达到损失函数的不同部分。然而,也有可能部分或全部的性能提升是由于隐式正则化的缘故,它鼓励所有数据都很好地拟合(批次方差较小)而不是某些数据非常好地拟合而其他数据拟合较差(尽管整体损失相同,但批次方差较大)。前者的解决方案往往更容易泛化。

图9.5 学习率和批次大小对于MNIST-1D数据集(参见图8.1)上的4000个训练示例和4000个测试示例的影响,此处考虑了一个具有两个隐藏层的神经网络。
- a)大学习率的性能优于中等或小学习率。在每种情况下,迭代次数为6000次学习率,因此每个解决方案有机会以相同的距离移动。
- b)较小的批次大小有更好的性能。在每种情况下,迭代次数都被选择为使得训练数据在大约相同的模型容量下被记忆。
9.3 提高性能的启发式方法 - Heuristics to improve performance
我们已经看到,通过添加显式的正则化项,可以通过向损失函数添加额外的项来鼓励训练算法寻找良好的解决方案。这也会作为随机梯度下降的一个非预期但似乎有帮助的副产品隐式地发生。本节描述了其他启发式方法,用于改善泛化。
9.3.1 提前停止 - Early stopping
提前停止是指在训练过程完全收敛之前停止。如果模型已经捕捉到了底层函数的大致形状,但还没有时间过拟合噪声,提前停止可以减少过拟合问题(图9.6)。一个思考这个问题的方法是,由于权重被初始化为较小的值(见第7.5节),它们根本没有时间变大,因此提前停止的效果类似于明确的L2正则化。另一个观点是,提前停止降低了模型的有效复杂性。因此,我们从关键区域回到偏差/方差权衡曲线上,性能得到了提升(图8.9和8.10)。

图 9.6 提前停止。
- a) 简化的浅层网络模型有 14 个线性区域(图 8.4 ),随机初始化(青色曲线),并使用批量大小为 5 和学习率为 0.05 的 SGD 进行训练。
- b-d) 随着训练的进行,函数首先捕捉到真实函数的粗略结构(黑色曲线),然后
- e-f) 过度拟合于噪声训练数据(橙色点)。尽管训练损失在整个过程中持续下降,但是在图 (c) 和 (d) 中学习的模型更接近真实的基础函数。它们在平均情况下对测试数据的泛化能力要优于图 (e) 或 (f) 中的模型。
提前停止有一个超参数,即学习终止之后的步骤数。通常情况下,通过使用验证集(第8.5节)来从实证角度选择该参数。然而,对于提前停止,可以在无需训练多个模型的情况下选择超参数。模型只需训练一次,每隔
9.3.2 集成方法 - Ensembling
减小训练数据和测试数据之间的泛化差距的另一种方法是构建多个模型并对它们的预测结果取平均。这一组模型被称为集成。这种技术能够可靠地提高测试性能,但代价是需要训练和存储多个模型,并进行多次推理。
这些模型可以通过取输出的平均值(用于回归问题)或预-softmax 激活的平均值(用于分类问题)来进行组合。假设模型错误是独立的,并且会相互抵消。或者,我们可以取输出的中位数(用于回归问题)或最频繁的预测类别(用于分类问题)来使预测更加稳健。
训练不同模型的一种方法是使用不同的随机初始化。这对于远离训练数据的输入空间的区域可能有所帮助。这里,拟合的函数集成没有太多的限制,不同的模型可能会产生不同的预测结果,因此多个模型的平均值可能比任何单个模型更好地泛化。
另一种方法是通过使用替换的方式重新抽样训练数据,并从中训练出多个不同的模型,生成几个不同的数据集。这个方法被称为bootstrap aggregating或简称为bagging(图9.7)。它的效果是平滑数据;如果一个数据点在某个训练集中不存在,模型会从附近的点进行插值;因此,如果该点是一个异常值,拟合的函数在这个区域将更加平缓。还有其他的方法,比如使用不同的超参数来训练模型,或者使用完全不同的模型家族。

图9.7 集成方法。
- a) 将单个模型(灰色曲线)拟合到整个数据集(橙色点)。
- b-e) 通过使用替换的方式对数据进行四次重新抽样(bagging),生成四个模型(橙色点的大小表示数据点被重新抽样的次数)。
- f) 当我们对这个集成模型的预测结果进行平均时,结果(青色曲线)比面板(a)中对整个数据集的结果(灰色曲线)更平滑,可能具有更好的泛化性能。
9.3.3 Dropout - Dropout
Dropout 是一种在随机梯度下降 (SGD) 的每次迭代中,随机将一部分隐藏单元(通常是50%)置零的方法(图9.8)。这使得网络不再过度依赖于任何给定的隐藏单元,并鼓励权重具有较小的值,从而减小了隐藏单元的存在与否对函数变化的影响。

图 9.8 Dropout。
- a) 原始网络。
- b-d) 在每次训练迭代中,随机选择一部分隐藏单元置零(灰色节点)。结果是这些单元的输入和输出权重没有影响,因此我们每次都在训练一个稍微不同的网络。
这种技术的一个优势是它可以消除远离训练数据并且不影响损失的不良“曲折”。例如,考虑沿着曲线移动时逐个激活的三个隐藏单元(图9.9a)。第一个隐藏单元导致了斜率的大幅增加。第二个隐藏单元降低了斜率,使函数向下走。最后,第三个单元抵消了这种下降并恢复了曲线的原始轨迹。这三个单元共同作用产生了一个不良的局部函数变化。这个曲线不会影响训练损失,但是不太可能有很好的泛化性能。
当多个单元以这种方式共同作用时,消除一个单元(如在dropout中发生的)会对输出函数产生相当大的变化,这种变化会传播到该单元处处于活跃状态的半空间(图9.9b)。随后的梯度下降步骤将试图补偿这种变化,并且这样的依赖关系会随着时间的推移而消除。总体效果是,即使这些变化对损失没有影响(图9.9),在训练数据点之间进行大幅度的不必要变化也会逐渐消除。
在测试时,我们可以像平常一样使用所有的隐藏单元来运行网络;然而,网络现在比训练时使用的隐藏单元更多,所以我们需要将权重乘以一减去dropout概率的值进行补偿。这被称为权重缩放推断规则。进行推断的另一种方法是使用蒙特卡洛dropout,即我们使用不同的随机子集将网络多次运行(与训练时相同的方式),并将结果合并。这与集成方法类似,因为网络的每个随机版本都是一个不同的模型;然而,我们在这里不必训练或存储多个网络。

图9.9 Dropout机制。
- a) 曲线中的一个不良曲折是由斜率的顺序增加、顺序减少(在圈起来的节点处)和再次增加导致的。在这里我们使用了全批量梯度下降,并且模型已经尽可能好地拟合了数据,所以进一步的训练不会消除这个曲折。
- b) 想象一下,如果我们移除在面板(a)中产生圈起来的节点的隐藏单元,就像使用dropout时可能发生的那样。没有斜率下降,函数的右侧会采取上升轨迹,随后的梯度下降步骤将旨在补偿这种变化。
- c) 通过 i. 随机删除造成曲折的三个隐藏单元中的一个,并 ii. 进行梯度下降步骤的2000次迭代,得到的曲线。这个曲折不会对损失产生影响,但是通过这种近似的dropout机制,曲折被消除了。
9.3.4 应用噪声 - Applying noise
Dropout可以解释为在网络激活上应用乘法伯努利噪声。这引出了在训练期间对网络的其他部分应用噪声的想法,以使最终模型更具鲁棒性。
一种选择是对输入数据添加噪声;这会使学习到的函数变得更加平滑(图9.10)。对于回归问题来说,可以证明这等价于添加一个正则化项,惩罚网络输出对输入的导数。一个极端的变体是对抗训练,在该方法中,优化算法主动寻找将输入中的小扰动导致输出发生大变化的情况。可以将这些扰动视为最坏情况的加性噪声向量。
第二种可能性是对权重添加噪声。这鼓励网络对权重的小扰动做出合理的预测。结果是训练收敛到宽阔且平坦区域中的局部最小值,在这些区域中,改变单个权重的影响不大。
最后,我们可以扰动标签。多类别分类的最大似然准则旨在以绝对确定性预测正确的类别(方程5.24)。为此,将最终的网络激活(即在softmax函数之前)推至非常大的值以表示正确的类别,而将错误的类别推至非常小的值。
我们可以通过假设训练标签中比例为

图 9.10 给输入添加噪声。在SGD的每一步中,将方差为
的随机噪声添加到批数据中。
- a-c) 不同噪声水平下的拟合模型(小点表示十个样本)。添加更多噪声使拟合函数(青色线条)变得平滑。
9.3.5 贝叶斯推断 - Bayesian inference
最大似然方法通常过于自信;在训练阶段,它会选择最可能的参数,并基于这些参数定义的模型进行预测。然而,许多参数值可能与数据存在较大的兼容性,只是稍微不太可能而已。贝叶斯方法将参数视为未知变量,并使用贝叶斯规则计算出在训练数据
其中
对于新的输入
这实际上是一个无限加权集合,其中权重取决于(i)参数的先验概率和(ii)其与数据的一致性。

图 9.11 简化网络模型(参见图 8.4)的贝叶斯方法。参数被视为不确定的。一组参数的后验概率
是由它们与数据 的兼容性和先验分布 决定的。
- a-c) 采样自具有均值为零和三个方差的正态分布先验的两组参数(青色和灰色曲线)。当先验方差较小时,参数也倾向于较小,并且函数较平滑。
- d-f) 推断过程是通过对所有可能的参数值进行加权求和,其中权重是后验概率。这既产生了均值的预测(青色曲线),也产生了相关的不确定性(灰色区域为两个标准差)。
贝叶斯方法优雅且能够提供比最大似然得出的更可靠的预测。不幸的是,对于像神经网络这样的复杂模型,在推断阶段无法以实际方式表示参数的完整概率分布,也无法对其进行积分。因此,目前所有这类方法都对某种程度进行近似,通常会给学习和推断带来相当大的复杂性。
9.3.6 迁移学习和多任务学习 - Transfer learning and multi-task learning
当训练数据有限时,可以利用其他数据集来提高性能。在迁移学习(图 9.12a)中,网络被预训练,以执行数据更丰富的相关次要任务。然后将得到的模型调整到原始任务上。通常的做法是去除最后一层,并添加一个或多个生成合适输出的层。主要模型可以固定,新的层训练用于原始任务,或者我们可以微调整个模型。
其原理在于,网络将从次要任务中构建出对数据的良好内部表示,这随后可以用于原始任务。等价地,可以将迁移学习视为在可能产生良好解决方案的合理空间的大部分参数中初始化最终网络。
多任务学习(图 9.12b)是一种相关技术,其中网络被训练以同时解决多个问题。例如,网络可以获取一张图像,并同时学习对场景进行分割,估计像素级深度,并预测描述图像的标题。所有这些任务都需要对图像有一定的理解,在同时学习时,每个任务的模型性能可能会提高。
9.3.7 自监督学习 - Self-supervised learning
上述讨论假设我们有大量用于辅助任务的数据,或者有多个任务需要同时学习的数据。如果没有这些数据,我们可以使用自监督学习创建大量的“免费”标记数据,并将其用于迁移学习。自监督学习有两种方法:生成式和对比式。
在生成式自监督学习中,每个数据示例的一部分被掩盖,次要任务是预测缺失的部分(图 9.12c)。例如,我们可以使用一组未标记的图像和一个次要任务,该任务旨在填充图像中缺失的部分(图 9.12c)。同样地,我们还可以使用大量的文本语料库并掩盖一些单词。我们训练网络来预测缺失的单词,然后对我们感兴趣的实际语言任务进行微调(参见第 12 章)。

图9.12 迁移学习、多任务学习和自监督学习。
- a) 当我们对主要任务(这里是深度估计)有限的标记数据,但对次要任务(这里是分割)有丰富的数据时,我们使用迁移学习。我们训练一个次要任务的模型,移除最后的层,并用适合主要任务的新层替换它们。然后,我们只训练新层或者对整个网络进行微调以用于主要任务。网络从次要任务中学习到了一个良好的内部表示,然后将其用于主要任务。
- b) 在多任务学习中,我们训练一个模型同时执行多个任务,希望每个任务的性能都能提高。
- c) 在生成式自监督学习中,我们删除部分数据,并训练网络来填补缺失的信息。这里的任务是填充(修复)图像的一部分。这样可以在没有标签的情况下进行迁移学习。图片来自 [Cordts等人](2016)。
在对比式自监督学习中,将具有共同特征的一对样本与不相关的一对样本进行比较。对于图像,次要任务可能是确定一对图像是否是彼此的变形版本还是无关的。对于文本,次要任务可能是确定两个句子是否在原始文档中相邻。有时,必须识别连接的一对之间的精确关系(例如,找到来自同一图像的两个区域的相对位置)。
9.3.8 数据增强 - Augmentation
迁移学习通过利用不同的数据集来提高性能。多任务学习通过使用额外的标签来提高性能。第三种选择是扩展数据集。我们通常可以将每个输入数据示例转换成一种方式,使得标签保持不变。例如,我们可能希望确定图像中是否有一只鸟(图9.13). 在这种情况下,我们可以旋转、翻转、模糊或者调整图像的色彩平衡,而标签“鸟”仍然有效。同样,对于输入为文本的任务,我们可以使用同义词替换或者翻译成另一种语言再翻译回来。对于输入为音频的任务,我们可以放大或者衰减不同的频段。

图9.13 数据增强。对于某些问题,可以通过转换每个数据示例来增强数据集。
- a) 原始图像。
- b-h) 这个图像的各种几何和光度变换。对于图像分类,所有这些图像仍然具有相同的标签“鸟”。改编自[Wu等人](2015a)。
通过这种方式生成额外的训练数据被称为数据增强。其目的是教会模型对这些无关的数据转换不予理会。
9.4 总结 - Summary
显式正则化是指在损失函数中添加一个额外的项,以改变最小值的位置。这个项可以被解释为参数的先验概率。带有有限步长的随机梯度下降并不能完全降到损失函数的最小值。这种偏差可以被解释为在损失函数中添加额外的项,这被称为隐式正则化。
还有许多用于改善泛化性能的启发式方法,包括早停法、随机失活、集成学习、贝叶斯方法、添加噪声、迁移学习、多任务学习和数据增强。这些方法背后有四个主要原则(图 9.14)。
- (i)鼓励函数变得更平滑(例如 L2 正则化)
- (ii)增加数据量(例如数据增强)
- (iii)组合模型(例如集成学习)
- (iv)寻找更宽的极小值点(例如对网络权重应用噪声)

图 9.14 正则化方法。本章讨论的正则化方法旨在通过四种机制之一来改善泛化性能。
- 1)使模型的函数更平滑。
- 2)增加了有效的数据量。
- 3)结合多个模型,从而减少了拟合过程中的不确定性。
- 4) 鼓励训练过程收敛到一个较宽的极小值点,这样估计参数时的小错误就不那么重要(也参见图 20.11)。
改善泛化性能的另一种方法是选择适合任务的模型架构。例如,在图像分割中,我们可以在模型内部共享参数,这样我们就不需要在每个图像位置独立学习树的外观。第10-13章考虑了为不同任务设计的架构变体。
9.5 注意事项 - Notes
有关深度学习中正则化技术的概述和分类可参见 Kukačka 等人,2017 。不容忽视的是,本章中没有讨论 BatchNorm (Szegedy 等人,2016) 及其变种,这些在第11章中有所描述。
正则化: L2 正则化对网络权重的平方和进行惩罚。这鼓励输出函数变化缓慢(即变得更加平滑),是最常用的正则化项。有时也被称为 Frobenius 范数正则化,因为它对权重矩阵的 Frobenius 范数进行惩罚。它经常被错误地称为“权重衰减”,而这是Hanson & Pratt,1988 提出的一种单独的技术,其中参数
其中,
其他向量范数的选择会鼓励权重的稀疏性。L0 正则化项对每个非零权重都施加了固定的惩罚。其效果是对网络进行“剪枝”。L0 正则化也可以用于鼓励组稀疏性;如果对于给定的隐藏单元,贡献权重中的任何一个都是非零的,则会施加固定的惩罚。如果它们全部为零,我们可以删除该单元,减小模型大小,使推理更快。
不幸的是,L0 正则化的实现具有挑战性,因为正则化项的导数不平滑,需要更复杂的拟合方法(参见Louizos等人,2018)。介于 L2 正则化和 L0 正则化之间的是 L1 正则化或 LASSO(最小绝对收缩和选择算子),它对权重的绝对值施加惩罚。L2 正则化在一定程度上抑制稀疏性,因为平方惩罚的导数随着权重变小而减小,降低了使其变得更小的压力。L1 正则化没有这个缺点,因为惩罚的导数是恒定的。这可以产生比 L2 正则化更稀疏的解,但比 L0 正则化更容易优化。有时会同时使用 L1 和 L2 正则化项,这被称为弹性网络惩罚(Zou & Hastie,2005)。
正则化的另一种方法是修改学习算法的梯度,而无需明确构建新的损失函数(例如方程9.13)。这种方法已被用于在反向传播过程中促进稀疏性( Schwarz et al.,2021)。
有效性正则化的证据存在争议。Zhang et al. , (2017a) 证明了L2正则化对泛化能力的贡献很小。已经证明了网络的Lipschitz常数(当我们修改输入时,函数如何快速变化)限制了泛化误差(Bartlett et al., 2017; Neyshabur et al., 2018)。然而,Lipschitz常数取决于权重矩阵
梯度下降中的隐式正则化: 梯度下降的步骤是
其中
对于典型的步长
使得它与离散版本产生相同的结果。
考虑在初始位置
在第二行中,我们引入了修正项(方程9.16),在最后一行中,我们删除了大于
注意右侧的前两项
在训练过程中,演化函数
这等价于对损失函数执行连续梯度下降。
这种隐式正则化的形式由Barrett&Dherin (2021)发展而来,并由Smith等人 (2021)扩展到随机梯度下降。Smith等人 (2020)和其他人已经表明,使用小或中等批量大小的随机梯度下降在测试集上的表现优于全批量梯度下降,这可能部分原因是隐式正则化。
相关地,Jastrzębski等人 (2021)和Cohen等人 (2021)都表明,使用较大的学习率减少了典型优化轨迹移动到损失函数的“更尖锐”部分的趋势(即至少一个方向具有较高曲率的部分)。使用较大学习率的这种隐式正则化效应可以通过惩罚Fisher信息矩阵的迹来近似,该迹与方程9.20中的梯度范数惩罚密切相关(Jastrzębski等人,2021)。
提前停止训练:Bishop (1995)和Sjöberg&Ljung (1995)认为,提前停止限制了训练过程可以探索的有效解空间;鉴于权重的初始值很小,这导致了提前停止有助于防止权重变得过大的想法。 Goodfellow等人 (2016)表明,在将参数初始化为零的损失函数的二次近似下,提前停止等效于L2正则化的梯度下降。有效的正则化权重
集成方法: 可以使用不同的随机种子(Lakshminarayanan等人,2017),超参数(Wenzel等人,2020b)或完全不同的模型族来训练集成。可以通过平均它们的预测结果,加权预测结果,或使用另一个机器学习模型进行堆叠(Wolpert,1992)来组合这些模型。Lakshminarayanan等人 (2017)表明,独立训练网络的输出平均可以提高准确性、校准性和鲁棒性。相反,Frankle等人 (2020)表明,如果将权重平均在一起形成一个模型,网络将失败。Fort等人 (2019)将由不同初始化产生的集成解决方案与由相同原始模型生成的集成解决方案进行了比较。例如,在后一种情况下,他们考虑在一个有限子空间中探索周围解的可能性,以找到其他附近的优秀点。他们发现这两种技术都提供了互补的好处,但不同随机起始点产生了更大的改进。
一种高效的集成方法是组合训练中间阶段的模型。为此,Izmailov等人 (2018)引入了随机权重平均,其中模型权重在不同的时间步骤进行采样并平均在一起。正如名称所示,快照集成(Huang等人,2017a)也会存储不同时间步骤的模型并平均它们的预测。通过循环增大和减小学习率可以提高这些模型的多样性。Garipov等人 (2018)观察到损失函数的不同极小值通常由低能量路径(即整个路径处处损失较低)连接。基于这一观察,他们开发了一种方法,探索初始解周围的低能量区域,以提供不需要重新训练的多样模型。这被称为快速几何集成。关于集成方法的综述可以在Ganaie等人 (2022)中找到。
Dropout(随机失活): Dropout 是由 Hinton 等人(2012b)和 Srivastava 等人(2014)首次引入的。Dropout 是应用在隐藏单元层级上的。关闭一个隐藏单元的效果就像是将所有传入、传出的权重和偏置暂时设置为零。Wan 等人(2013)通过随机将个别权重置零来泛化了 Dropout。Gal & Ghahramani(2016)和 Kendall & Gal(2017)提出了蒙特卡洛 Dropout,推断过程在多个 Dropout 模式下进行,并对结果进行平均。Gal & Ghahramani(2016)认为这可以被解释为对贝叶斯推断的近似。
Dropout 相当于对隐藏单元应用乘法伯努利噪声。使用其他分布也可以获得类似的好处,包括正态分布(Srivastava 等人,2014;Shen 等人,2017)、均匀分布(Shen 等人,2017)和贝塔分布(Liu 等人,2019b)。
加入噪声: Bishop(1995)和 An(1996)在网络输入中加入高斯噪声以提高性能。Bishop(1995)表明这等效于权重衰减。An(1996)还研究了对权重加入噪声的方法。DeVries & Taylor(2017a)对隐藏单元加入了高斯噪声。随机修正线性单元(Xu 等人,2015)通过以不同的方式引入噪声,使激活函数具有随机性。
标签平滑: 标签平滑最初由 Szegedy 等人(2016)用于图像分类,但在语音识别(Chorowski & Jaitly,2017)、机器翻译(Vaswani 等人,2017)和语言建模(Pereyra 等人,2017)中也被证明是有帮助的。标签平滑改善测试性能的具体机制尚不为人们所理解,尽管 Müller 等人(2019a)表明它改善了预测输出概率的校准性。一种密切相关的技术是 DisturbLabel(Xie 等人,2016),在每个训练迭代中,将每批数据中一定百分比的标签随机切换。
寻找更宽的极小值: 人们认为更宽的极小值具有更好的泛化性能(见图 20.11)。在这种情况下,权重的确切值不那么重要,因此性能应该对其估计的误差具有鲁棒性。在训练过程中将噪声应用于网络的部分是有效的原因之一,因为它鼓励网络对其确切值不那么敏感。
Chaudhari 等人(2019)开发了一种偏向于扁平极小值的 SGD 变体,称为熵 SGD。其思想是在损失函数中加入局部熵项。实际上,这相当于在另一个 SGD-like 更新中进行了一次更新。Keskar 等人(2017)表明,随着批大小的减小,SGD 找到的极小值更宽。这可能是由于 SGD 隐式正则化导致的批方差项。
Ishida 等人(2020)使用了一种名为 flooding 的技术,他们有意阻止训练损失变为零。这鼓励解决方案在损失空间中进行随机游走,并漂移到具有更好泛化性能的更平坦区域。
贝叶斯方法: 对于某些模型,包括图9.11 中的简化神经网络模型,可以通过闭合形式计算贝叶斯预测分布(参见Bishop, 2006;Prince, 2012).对于神经网络,参数的后验分布无法以闭合形式表示,必须进行近似处理。主要有两种方法:变分贝叶斯(Hinton & van Camp, 1993;MacKay, 1995;Barber & Bishop, 1997;Blundell等,2015年)以及马尔科夫链蒙特卡罗(MCMC)方法,后者通过抽取一组样本来近似分布(Neal, 1995;Welling & Teh, 2011;Chen et al., 2014;Ma et al., 2015;Li et al., 2016a).样本的生成可以与随机梯度下降(SGD)结合,这被称为随机梯度MCMC(参见Ma et al., 2015).最近发现,"冷却"参数的后验分布(使其变得更尖锐)可以改善这些模型的预测效果(Wenzel et al., 2020a),但目前尚未完全理解(参见Noci et al., 2021).
迁移学习: 对于视觉任务,迁移学习效果非常好(Sharif Razavian等,2014年),并且已经在计算机视觉领域取得了快速进展,包括原始的AlexNet结果(Krizhevsky et al., 2012).迁移学习也对自然语言处理(NLP)产生了影响,其中许多模型基于BERT模型的预训练特征(Devlin等,2019年).更多信息可以在Zhuang et al.(2020年)和Yang et al.(2020b年)中找到.
自监督学习: 图像的自监督学习技术包括修复遮挡的图像区域(Pathak et al., 2016),预测图像中补丁的相对位置(Doersch et al., 2015),将重新排列的图像块恢复到其原始配置(Noroozi & Favaro, 2016),给灰度图像上色(Zhang et al., 2016b)以及将旋转的图像恢复到其原始方向(Gidaris et al., 2018).在SimCLR中(Chen et al., 2020c),学习了一种将经过光度和几何变换的同一图像版本映射到相同表示的网络,同时将不同图像版本推开,目标是对不相关的图像变换不加区分. Jing & Tian(2020年)对图像中的自监督学习进行了综述.
NLP中的自监督学习可以基于预测被屏蔽的单词(Devlin et al., 2019),预测句子中的下一个词(Radford et al., 2019;Brown et al., 2020)或预测两个句子是否相邻(Devlin et al., 2019).在自动语音识别中,Wav2Vec模型(Sc hneider et al., 2019)旨在区分原始音频样本和其中10毫秒的音频替换自剪辑的其他位置.自监督学习还应用于图神经网络(第13章).任务包括恢复被屏蔽的特征(You et al., 2020)和恢复图的邻接结构(Kipf & Welling, 2016). Liu et al.(2023a年)综述了图模型的自监督学习.
数据增强: 图像数据增强可以追溯到至少LeCun et al. (1998)和AlexNet的成功( Krizhevsky et al. , 2012 ),其中数据集扩大了2048倍。图像增强方法包括几何变换、改变或操作颜色空间、注入噪声和应用空间滤波器。更复杂的技术包括随机混合图像( Inoue , 2018; Summers & Dinneen , 2019 )、随机擦除图像的一部分( Zhong et al. , 2020 )、风格转移( Jackson et al. , 2019 )和随机交换图像补丁( Kang et al. , 2017 )。此外,许多研究使用生成对抗网络或GAN(参见第15章)产生新颖但可信的数据示例(例如,Calimeri et al. , 2017 )。在其他情况下,数据通过对抗性示例进行增强( Goodfellow et al. , 2015a ),这些对抗性示例是对训练数据的微小扰动,会导致示例被错误分类。关于图像数据增强的综述可在Shorten & Khoshgoftaar (2019)中找到。
声学数据的增强方法包括音高变换、时间拉伸、动态范围压缩和添加随机噪声(例如,Abeßer et al. , 2017; Salamon & Bello , 2017; Xu et al. , 2015; Lasseck , 2018 ),以及混合数据对( Zhang et al. , 2017c; Yun et al. , 2019 ),遮蔽特征( Park et al. , 2019 )和使用GAN生成新数据( Mun et al. , 2017 )。针对语音数据的增强包括声道长度扰动( Jaitly & Hinton , 2013; Kanda et al. , 2013 )、风格转移( Gales , 1998; Ye & Young , 2004 )、添加噪声( Hannun et al. , 2014 )和合成语音( Gales et al. , 2009 )。
文本数据的增强方法包括在字符级别上添加噪声,通过切换、删除和插入字母(例如,Belinkov & Bisk , 2018; Feng et al. , 2020 ),或通过生成对抗性示例( Ebrahimi et al. , 2018 ),使用常见的拼写错误( Coulomb et al. , 2018 ),随机交换或删除单词( Wei & Zou , 2019 ),使用同义词( Kolomiyets et al. , 2011 ),改变形容词( Li et al. , 2017c ),被动化( Min et al. , 2020 ),使用生成模型创建新数据( Qiu et al. , 2020 ),以及从其他语言翻译回来(Aiken & Park , 2010 )。文本数据的增强方法由Bayer et al. (2022)进行了综述。
9.6 问题 - Problems
问题 9.1 考虑一个模型,其中参数的先验分布是具有均值为零和方差为
其中
问题 9.2 当添加 L2 正则化(方程 9.5 )时,损失函数的梯度如何改变?
问题 9.3 考虑一个线性回归模型
问题 9.4 ∗ 推导多类别分类的损失函数,当我们使用标签平滑(label smoothing)时,使得目标概率分布在正确类别上为 0.9 ,剩余概率质量 0.1 均匀分布在剩余的
问题 9.5 证明带有衰减率
对于原始的损失函数
其中
问题 9.6 考虑一个具有参数
本章目录
- 本章目录
- 第10章 卷积神经网络 - Convolutional networks
- 10.1 不变性和等变性 - Invariance and equivariance
- 10.2 用于一维输入的卷积网络 - Convolutional networks for 1D inputs
- 10.2.1 一维卷积操作 - 1D convolution operation
- 10.3 用于二维输入的卷积网络 - Convolutional networks for 2D inputs
- 10.4 降采样和上采样 - Downsampling and upsampling
- 10.5 应用领域 - Applications
- 10.6 总结 - Summary
- 10.7 注意 - Notes
- 10.8 问题 - Problems
第10章 卷积神经网络 - Convolutional networks
前面的第2-9章介绍了深度神经网络的监督学习流程。然而,这些章节只讨论了具有单一路径的全连接网络。接下来的第10-13章将介绍更专门的网络组件,它们具有更稀疏的连接、共享的权重和并行处理路径。本章将介绍主要用于处理图像数据的卷积层。
图像有三个特点,因此需要专门的模型架构来处理
- 首先,图像是高维的。一个典型的用于分类任务的图像包含224×224个RGB值(即150,528个输入维度)。全连接网络中的隐藏层通常比输入尺寸要大,因此即使对于一个浅层网络,权重的数量也会超过150,528^2^,即220亿个。显然,这会对所需的训练数据量、内存大小和算力大小等方面带来极大的挑战。
- 其次,图像中的像素之间是统计相关的。然而,全连接网络没有考虑像素之间的“邻近性”,它对每个输入之间的关系都一视同仁。如果训练和测试图像的像素以相同的方式随机排列,网络仍然可以在没有实际差异的情况下进行训练。
- 第三,图像的解释在几何变换下是稳定的。如果我们将一棵树的图像向左移动几个像素,它仍然是一棵树的图像。然而,这个移动会影响网络的每个输入。因此,全连接模型必须在每个位置上单独学习表示树的像素模式,这显然是低效的。
卷积层独立地处理每个局部图像区域,使用在整个图像上共享的参数。它们使用的参数比全连接层少,利用了附近像素之间的空间关系,并且不需要在每个位置重新学习像素的解释。主要由卷积层组成的网络被称为卷积神经网络或CNN。
10.1 不变性和等变性 - Invariance and equivariance
在前面的讨论中,我们已经提到了图像的某些属性在变换下是稳定的,比如树纹理。现在,我们将这个想法更加数学化。对于一个图像
换句话说,对于变换
对于一个图像
换句话说,当输入发生变换时,函数

图10.1 平移的不变性和等变性。
- a-b) 在图像分类中,我们的目标是将这两个图像都归类为"山",而不考虑水平平移。换句话说,我们希望神经网络的预测结果在平移变换下保持不变。
- c,e) 在语义分割中,我们的目标是为每个像素赋予一个标签。
- d,f) 当输入图像被平移时,我们希望输出(彩色覆盖)也以相同的方式平移。换句话说,我们希望输出在平移变换下是等变的。图c-f)改编自Bousselham et al. , 2021。
10.2 用于一维输入的卷积网络 - Convolutional networks for 1D inputs
卷积网络由一系列卷积层组成,每一层对于平移具有等变性。它们通常还包括池化机制,以实现对于平移的部分不变形。为了更清楚地说明这个概念,我们首先考虑对于一维数据的卷积网络,这样更容易进行可视化。在第10.3节中,我们将进一步讨论如何将这些概念应用于图像数据。
10.2.1 一维卷积操作 - 1D convolution operation
卷积层是基于卷积操作的网络层。在一维空间中,卷积将输入向量
其中

图10.2 1维卷积,核大小为3。每个输出
是最近的三个输入 和 的加权和,其中权重为 。
- a) 输出
的计算公式为 。 - b) 输出
的计算公式为 。 - c) 位置
处的卷积核超出了第一个输入 的范围。我们可以通过零填充来处理这个问题,即假设超出范围的值为零。输出也以类似的方式处理。 - d) 或者,我们只计算卷积核在输入范围内的输出("valid"卷积);这种情况下,输出的尺寸将比输入小。
^1^ 严格来说,这是一个互相关而不是卷积操作,因为权重相对于输入会翻转(即我们会将
与 交换)。但无论如何,这个(错误的)定义是机器学习中的通常约定。
10.2.2 填充 - Padding
方程10.3显示,每个输出都是通过对输入的前一个、当前和后一个位置进行加权求和得到的。这就引发了一个问题,即如何处理第一个输出(其中没有前一个输入)和最后一个输出(其中没有后一个输入)。
有两种常见的方法。
- 第一种方法是在输入的边缘填充新的值,然后按照通常的方式进行处理。例如零填充,是假设在其有效范围之外,输入为零(图10.2c)。其他填充方案有将输入视为循环输入或在边界处进行反射。
- 第二种方法是有效卷积,它会丢弃卷积核超过输入位置范围的输出位置。它的优点是在输入边缘不引入额外的信息。然而,它们的缺点是表示的尺寸减小。
10.2.3 步幅、卷积核大小和膨胀 - Stride, kernel size, and dilation
在上面的例子中,每个输出都是最近三个输入的总和。然而,这只是一大类卷积操作中的一种,它们的基于步幅、卷积核大小和膨胀率的不同而有所区别。当我们在每个位置评估输出时,我们称之为步幅为一。然而,也可以将卷积核按大于一的步幅移动。例如,如果步幅为2,则会创建大约一半数量的输出(图10.3a-b)。

图10.3 步幅、卷积核大小和膨胀。
- a) 当步幅为2时,我们每隔一个位置评估一次卷积核,因此第一个输出
是从以 为中心的加权和计算得出的, - b) 第二个输出
是从以 为中心的加权和计算得出的,依此类推。 - c) 卷积核大小也可以改变。当卷积核大小为五时,我们对最近的五个输入进行加权求和。
- d) 在膨胀卷积中,我们在权重向量中插入零,以便使用更少的权重来结合较大区域的信息。
卷积核大小可以增加以覆盖更大的区域(图10.3c)。通常情况下,卷积核的大小是奇数,这样可以将当前输入放置在中心位置。增加卷积核大小的缺点是需要更多的权重。这就引出了膨胀卷积或扩张卷积的概念,其中卷积核的权重值与零交替。例如,我们可以通过将第二个和第四个元素设置为零,将大小为五的卷积核变成大小为三的膨胀卷积核。这样我们仍然可以从较大的输入区域中获取信息,但只需要三个权重来实现这一点(图10.3d)。插入在权重之间的零的数量决定了膨胀率。
10.2.4 卷积层 - Convolutional layers
卷积层的功能是对输入进行卷积运算,并加上偏移量
其中,偏移量
对于

图10.4 全连接层与卷积层对比。
- a) 在全连接层中,每个输入
都与每个隐藏单元 有一个连接权重(彩色箭头),每个隐藏单元都有一个偏移量(未显示)。 - b) 因此,对应的权重矩阵
包含了将六个输入与六个隐藏单元关联起来的36个权重。 - c) 卷积层使用大小为三的卷积核来计算每个隐藏单元,作为三个相邻输入的加权和(箭头),再加上一个偏移量(未显示)。
- d) 权重矩阵是全连接矩阵的一种特殊情况,其中很多权重为零且其他权重重复出现(相同颜色表示相同值,白色表示零权重)。
- e) 大小为三且步长为两的卷积层在每隔一个位置处进行加权求和。
- f) 这也是一种具有不同稀疏权重结构的全连接网络的特殊情况。
10.2.5 通道 - Channels
如果我们只使用一个卷积操作,就会丢失信息,因为我们只是对相邻的输入进行了平均,并且ReLU激活函数还会截断小于零的结果。因此,通常会同时计算多个卷积操作。每个卷积操作会生成一组新的隐藏变量,称为特征图或通道。
图 10.5a-b 以大小为3且使用零填充的两个卷积核为例进行了说明。
- 第一个卷积核对最近的3个像素进行加权求和,再加上一个偏移量,并通过激活函数产生隐藏单元
到 。它们组成了第一个通道。 - 第二个卷积核对不同的最近3个像素进行加权求和,再加上不同的偏移量,并通过激活函数产生隐藏单元
到 。它们组成了第二个通道。
一般来说,输入和隐藏层都会有多个通道(图[10.5c])。如果输入层有

图10.5 通道。通常,我们会对输入
应用多个卷积操作,并将它们存储在通道中。
- a) 进行卷积操作以生成隐藏单元
到 ,它们组成了第一个通道。 - b) 再进行一次卷积操作以生成隐藏单元
到 ,它们组成了第二个通道。通道被存储在二维数组 中,其中包含了第一个隐藏层中的所有隐藏单元。 - c) 如果我们添加更多的卷积层,现在每个输入位置都会有两个通道。在这个例子中,一维卷积定义了在最接近的三个位置上对两个输入通道进行加权求和,以生成每个新的输出通道。
10.2.6 卷积网络与感受域 - Convolutional networks and receptive fields
在第四章中,我们介绍了由一系列全连接层组成的深度网络。类似地,卷积网络由一系列卷积层组成。而这些卷积层中的隐藏单元所关注的是输入数据中的感受域,即与之相关的区域。举个例子,假设一个卷积网络中的每个卷积层都采用了大小为三的卷积核。在第一层,隐藏单元对最接近的三个输入进行加权求和,所以它的感受域大小就是三。而在第二层,隐藏单元对第一层中最接近的三个位置进行加权求和,而这些位置本身又是三个输入的加权求和,所以第二层的隐藏单元具有大小为五的感受域。通过这种方式,连续的层中的单元的感受域会逐渐增大,从而实现来自输入的信息逐渐融合(见图10.6)。

图10.6 卷积网络中的感受域示意图(使用3个卷积核的情况)。
- a) 输入是一个具有11个维度的向量,进入一个具有3个通道和大小为3的卷积核的隐藏层
。第一个隐藏层 中三个突出显示的隐藏单元的预激活是最近三个输入的加权和,因此在 中的感受域大小为3。 - b) 第二层
中四个突出显示的隐藏单元的预激活分别是第一层 中三个通道在最近的三个位置的加权和。每个 中的隐藏单元对最近的三个输入位置进行加权。因此, 中的隐藏单元具有感受域大小为5。 - c) 第三层中的隐藏单元(卷积核大小为3,步幅为2)将感受域大小增加到7。
- d) 当我们添加第四层时,位于位置3的隐藏单元的感受域覆盖整个输入。
10.2.7 示例:MNIST-1D数据集 - Example: MNIST-1D
现在我们将卷积网络应用于MNIST-1D数据集(参见图8.1)。输入向量

图10.7 用于分类MNIST-1D数据集的卷积网络(参见图8.1)。MNIST-1D输入的维度为
。第一个卷积层具有15个通道,卷积核大小为3,步幅为2,并且只保留“valid”位置以生成具有19个位置和15个通道的表示。接下来的两个卷积层具有相同的设置,逐渐减小表示的大小。最后,一个全连接层接收来自第三个隐藏层的所有60个隐藏单元。它输出10个激活值,随后通过softmax层产生10个类别的概率。
这个网络使用了100,000个步骤进行训练,使用了没有动量的SGD优化算法,学习率为0.01,批大小为100,训练集包含了4,000个样本。我们将这个网络与具有相同层数和隐藏单元个数的全连接网络进行比较(即三个隐藏层分别具有285、135和60个隐藏单元)。卷积网络具有2,050个参数,而全连接网络具有150,185个参数。根据图10.4的逻辑,卷积网络是全连接网络的一种特殊情况。后者具有足够的灵活性来完全模拟前者。图10.8显示,两种模型都完美拟合了训练数据。然而,卷积网络的测试误差远小于全连接网络。

图10.8 MNIST-1D结果。
- a) 图10.7中的卷积网络最终完美拟合了训练数据,但测试误差约为17%。
- b) 具有相同数量的隐藏层和隐藏单元的全连接网络学习训练数据的速度更快,但在测试误差达到约40%时无法很好地泛化。后一种模型可以复现卷积模型,但却不能成功。卷积结构限制了可能的映射方式,使其以类似的方式处理每个位置,这种限制提高了性能。
可能的解释并不是由于参数数量的差异所造成的,我们知道过度参数化通常会提高性能(参见8.4.1节)。相反,可能的解释是卷积架构具有更好的归纳偏差,即更好地插值训练数据。在卷积网络中,我们在架构中体现了一些先验知识,并强制网络以相同的方式处理输入中的每个位置。我们知道数据是基于模板创建的,该模板会在一些操作之间进行随机平移,因此这是合理的。
相比之下,全连接网络必须学习每个位置上每个数字模板的外观。而卷积网络则在位置之间共享信息,因此能够更准确地识别每个类别。另一种思考这个问题的方式是,在训练卷积网络时,我们搜索一个较小的输入/输出映射集合,其中所有映射都是可行的。或者,我们可以将卷积结构视为一种正则化器,它对全连接网络可以描述的大多数解施加了无限惩罚。
10.3 用于二维输入的卷积网络 - Convolutional networks for 2D inputs
前一节介绍了用于处理一维数据的卷积网络。这种网络可以应用于金融时间序列、音频和文本。然而,卷积网络更常用于二维图像数据。卷积核现在是一个二维对象。一个应用于由元素
其中

图 10.9 二维卷积层。每个输出
计算最近的 3×3 个输入的加权和,加上一个偏移量,并通过一个激活函数传递结果。
- a) 在这里,输出
(阴影输出)是从 到 的九个位置(阴影输入)的加权和。 - b) 通过在两个维度上平移核心,可以计算出不同的输出。
- c-d) 在进行零填充的情况下,被认为在图像边缘之外的位置为零。
通常输入是一个RGB图像,被视为一个具有三个通道的二维信号(图10.10)。在这种情况下,一个3×3的卷积核将有3×3×3个权重,并被应用于2D卷积的每个3×3位置的三个输入通道,以创建与输入图像相同高度和宽度的二维输出(假设进行零填充)。要生成多个输出通道,我们使用不同的卷积核权重重复此过程,并将结果连接起来形成一个三维张量。如果卷积核的大小为

图10.10 对图像应用2D卷积。图像被视为一个具有三个通道的二维输入,对应于红色、绿色和蓝色分量。使用3×3的卷积核,第一个隐藏层中的每个预激活通过将3×3×3的卷积核权重与以同一位置为中心的3×3的RGB图像块进行逐点乘积,求和并添加偏移量来计算。为了计算隐藏层中的所有预激活,我们在水平和垂直方向上"滑动"卷积核在图像上。输出是一个具有隐藏单元的二维层。要创建多个输出通道,我们可以使用多个卷积核重复这个过程,从而得到一个隐藏层
中的三维张量。
10.4 降采样和上采样 - Downsampling and upsampling
在图10.7中,网络通过使用步幅为2的卷积来缩小表示,并增加了感受域的大小。现在让我们考虑一下缩小或降采样2D输入表示的方法。当输出也是图像时,我们还需要描述将它们放大回去(上采样)的方法。最后,我们将讨论在层之间改变通道数量的方法,这对于重新组合网络的两个分支的表示非常有用(第11章)。
10.4.1 降采样 - Downsampling
有三种主要的方法来缩小2D表示。在这里,我们考虑最常见的情况,即将两个维度同时缩小两倍。首先,我们可以对每个位置进行采样。当我们使用步幅为2时,实际上是同时应用了这种方法和卷积操作(图10.11a)。
其次,最大池化保留2×2输入值的最大值(图10.11b)。这种方法在一定程度上具有平移不变性;如果输入向右或向下移动一个像素,其中许多最大值仍然相同。最后,平均池化对输入进行平均。对于所有的方法,我们将降采样分别应用到每个通道,所以输出的宽度和高度减半,但通道数量保持不变。

图10.11 缩小表示大小的方法(下采样)。
- a) 子采样。原始的4×4表示(左)通过保留每隔一个输入被减小到2×2的大小(右)。左侧的颜色表示哪些输入对右侧的输出有贡献。这与步幅为2的核的情况下发生的情况相同,但是中间值永远不会被计算。
- b) 最大池化。每个输出由相应的2×2块中的最大值组成。
- c) 平均池化。每个输出是2×2块中值的平均值。
10.4.2 上采样 - Upsampling
要将网络层的分辨率提高一倍,有几种简单的方法可供选择。第一种方法是在每个空间位置上将所有通道复制四次(图10.12a)。第二种方法是最大值反池化,即将之前使用最大池化操作进行下采样时的值重新分配到它们最初来自的位置(图10.12b)。第三种方法是使用双线性插值来填充采样点之间的缺失值(图10.12c)。

图10.12 放大表示大小的方法(上采样)。
- a) 将2D层的大小加倍的最简单方法是将每个输入复制四次。
- b) 在之前使用最大池化操作的网络中(图10.11b),我们可以将值重新分配到它们最初来自的位置(即最大值的位置)。这被称为最大值反池化。
- c) 第三种选项是使用输入值之间的双线性插值。
第四种方法在某种程度上类似于下采样时使用步幅为2的操作。该方法中,输出数量是输入数量的一半,并且对于3×3的核大小,每个输出是最接近的三个输入的加权和(图10.13a)。在转置卷积中,图像被反转(图10.13c),输出数量是输入数量的两倍,并且每个输入对三个输出有贡献。当考虑与这种上采样机制相关的权重矩阵(图10.13d)时,可以看到它与下采样机制的矩阵的转置(图10.13b)是相同的。

图10.13 一维中的转置卷积。
- a) 使用核大小为三、步幅为二和零填充进行下采样。每个输出是三个输入的加权和(箭头表示权重)。
- b) 这可以通过一个权重矩阵来表示(相同的颜色表示共享的权重)。
- c) 在转置卷积中,每个输入对输出层有三个值的贡献,输出数量是输入数量的两倍。
- d) 相关的权重矩阵是图(b)中的矩阵的转置。
10.4.3 改变通道数 - Changing the number of channels
有时候我们想要在一个隐藏层和下一个隐藏层之间改变通道数,而无需进一步进行空间池化。通常这是为了将表示与另一个并行计算相结合(见第11章)。为了实现这一点,我们可以应用一个核大小为1的卷积。输出层的每个元素是通过对相同位置的所有通道进行加权和来计算的(图10.14)。我们可以使用不同的权重多次重复这个过程,以生成我们所需的输出通道数。相关的卷积权重的大小为

图10.14 1×1卷积。为了在不进行空间池化的情况下改变通道数,我们应用一个1×1的卷积核。每个输出通道通过对该位置上所有通道的加权求和,再加上一个偏移量项,并通过激活函数进行处理来计算。通过使用不同的权重和偏移量项多次执行此操作,可以创建多个输出通道。
10.5 应用领域 - Applications
在这一节中,我们将介绍三个计算机视觉的应用领域。首先,我们将描述卷积神经网络在图像分类中的应用,其目的是将图像分到预定义的类别中去。接下来,我们将探讨目标检测,其目标是在图像中识别多个对象,并找到每个对象的边界框。最后,我们将介绍一个早期的语义分割系统,其目标是为每个像素分配一个标签,以便根据存在的对象进行区分。
10.5.1 图像分类 - Image classification
在计算机视觉领域,深度学习在图像分类方面取得了重大突破。其中,对ImageNet数据集的应用成为了开创性的工作(图10.15)。该数据集包含了1,281,167张训练图像、50,000张验证图像和100,000张测试图像,并且每张图像都被标注为1000个可能类别之一。

图10.15 ImageNet分类示例图像。该模型的目标是将输入图像分配到1000个类别中的一个。这个任务具有挑战性,因为图像在不同的属性上变化很大(列)。这些属性包括刚性(猴子 < 独木舟)、图像中实例的数量(蜥蜴 < 草莓)、杂乱程度(罗盘 < 钢鼓)、尺寸(蜡烛 < 蜘蛛网)、纹理(螺丝刀 < 豹子)、颜色的独特性(马克杯 < 红葡萄酒)和形状的独特性(海角 < 钟)。
一个常见的方法将输入图像调整为标准尺寸。在典型的系统中,网络的输入
2012年,AlexNet成为了第一个在这个任务上表现出色的卷积神经网络。它由八个隐藏层组成,其中前五个是卷积层,后面的三个是全连接层(图10.16)。网络首先使用一个11×11的卷积核和步长为4来对输入进行降采样,以生成96个通道。然后再使用一个最大池化层进行降采样,并应用一个5×5的卷积核生成256个通道。接下来有三个卷积层,卷积核大小为3×3,最终得到一个13×13的表示,有256个通道。这个表示被调整大小为一个长度为43,264的向量,然后通过三个全连接层传递,这三个全连接层分别包含4096、4096和1000个隐藏单元。最后一层通过softmax函数输出一个对这1000个类别的概率分布。整个网络共有6000万个参数,其中大部分位于全连接层和网络的末尾。

图10.16 AlexNet ([Krizhevsky et al.], 2012)。该网络将一个224×224的彩色图像映射成一个包含类别概率的1000维向量。网络首先使用11×11的卷积核和步长为4进行卷积,生成96个通道。然后使用最大池化操作再次降低分辨率,并应用一个5×5的卷积层。接着是另一个最大池化层,然后应用三个3×3的卷积层。经过最后一个最大池化操作后,结果被展平为一个长度为43,264的向量,然后通过三个全连接(FC)层,最后是softmax层。 数据集的大小通过空间变换和输入强度的修改因子增加了2048倍。在测试时,将图像的五个不同裁剪和镜像版本输入网络,并对它们的预测结果进行平均。该系统使用动量系数为0.9和批次大小为128的SGD进行了训练,全连接层应用了Dropout,并使用了L2(权重衰减)正则化器。该系统的前5错误率为16.4%,前1错误率为38.1%。这一成果在当时被认为远远超出了当代方法的能力范围,标志着深度学习的潜力,并开启了现代人工智能研究的时代。
VGG网络是另一个针对ImageNet分类问题的网络模型,它实现了更好的性能,前5错误率为6.8%,前1错误率为23.7%。该网络由一系列交替的卷积层和最大池化层组成,空间尺寸逐渐减小,但通道数增加。之后是三个全连接层。VGG网络也使用了数据增强、权重衰减和Dropout进行训练。
尽管训练方案存在一些细微差异,但AlexNet和VGG之间最重要的变化是网络的深度。VGG网络使用了19个隐藏层和1.44亿个参数。图10.17展示了VGG网络与AlexNet在相同比例下的比较。多年来,在这个任务上的性能提高与网络深度的增加呈现出一致的趋势,这证明了深度对神经网络的重要性。

图10.17 VGG网络([Simonyan & Zisserman], 2014)与AlexNet(见图10.16)在相同比例下的比较。该网络由一系列卷积层和最大池化操作组成,其中表示的空间尺度逐渐减小,但通道数量逐渐增加。最后一个卷积操作后的隐藏层被调整为一个一维向量,之后是三个全连接层。该网络输出1000个与类标签相对应的激活,通过softmax函数生成类别概率。
10.5.2 目标检测 - Object detection
在目标检测任务中,我们需要识别和定位图像中的多个对象。其中一种早期的基于卷积神经网络的方法是You Only Look Once(YOLO),它的输入是一个448×448的RGB图像。YOLO网络通过24个卷积层逐渐减小表示的大小,同时增加通道的数量,类似于VGG网络。最后一个卷积层的大小是7×7,并且有1024个通道。这个输出被重新塑形为一个向量,然后通过全连接层映射成4096个值。另一个全连接层将这个表示映射到最终的输出。
输出的值编码了每个7×7网格位置上存在的对象类别(图10.18a-b)。对于每个位置,输出还编码了固定数量的边界框。每个边界框由中心的x和y位置、高度和宽度以及预测的置信度参数定义(图10.18c)。置信度表示了预测的边界框与真实边界框之间的重叠程度。该系统使用了动量、权重衰减、dropout和数据增强等技术进行训练。在训练过程中,首先对网络进行ImageNet分类任务的预训练,然后再进行目标检测的微调。
在网络运行之后,我们使用启发式方法删除置信度较低的矩形,并抑制对应于同一对象的多个预测边界框,只保留最有信心的一个。

图10.18 YOLO目标检测。
- a) 输入图像被重新塑形为448×448的大小,并分成一个规则的7×7网格。
- b) 系统预测每个网格单元中最有可能的类别。
- c) 它还预测每个单元格的两个边界框和一个置信度值(由线的粗细表示)。
- d) 在推断过程中,我们保留最有可能的边界框,并抑制置信度较低的属于同一对象的边界框。改编自Redmon等人,2016。
10.5.3 语义分割 - Semantic segmentation
语义分割的目标是为每个像素分配一个标签,该标签表示像素所属的对象。如果训练数据库中没有与像素相对应的内容,则不为其分配标签。图10.19展示了早期用于语义分割的网络。输入是一个224×224的RGB图像,输出是一个224×224×21的数组,其中每个位置包含了21个可能类别的概率。
网络的第一部分是VGG的一个较小版本(图10.17),它包含了13个卷积层而不是15个,并将表示缩小到14×14大小。然后进行一次最大池化操作,接着是两个全连接层,将表示映射到大小为4096的两个一维表示。这些层不表示空间位置,而是将整个图像的信息进行了组合。
在这里,网络的架构与VGG不同。另一个全连接层将表示重新组合为7×7的空间位置和512个通道。接下来是一系列的最大反池化层(参见图10.12b)和反卷积层。这些是二维的转置卷积(参见图10.13),但没有进行上采样。最后,进行一个1×1卷积,创建21个通道,表示可能的类别,并在每个空间位置上进行softmax操作,将激活映射到类别概率。网络的下采样部分有时被称为编码器,上采样部分被称为解码器,因此这种类型的网络有时被称为编码器-解码器网络或沙漏网络,因为它们的形状类似。

图10.19 Noh等人,2015年的语义分割网络。输入是一个224×224的图像,经过VGG网络的一个版本,并通过一个全连接层转换成大小为4096的表示。它包含了整个图像的信息。然后通过另一个全连接层将其重新形成为大小为7×7的表示,并通过上采样和反卷积(未进行上采样的转置卷积)与VGG网络的镜像进行运算。输出是一个224×224×21的表示,给出了每个位置上21个类别的输出概率。
最终的分割是使用一种启发式方法生成的,该方法贪婪地搜索最具代表性的类别并推断其区域,同时考虑概率并鼓励连通性。然后,在剩余未标记的像素中,添加下一个最具代表性的类别,只要它在那里占主导地位。这个过程会继续,直到没有足够的证据来添加更多类别(图10.20)。

图10.20 语义分割结果。最终的结果是通过贪婪地选择最佳类别,并使用启发式方法根据概率和它们的空间接近性找到一个合理的二进制图,从21个概率图中创建的。如果有足够的证据,将添加后续类别,并组合它们的分割图。改编自Noh等人,2015。
10.6 总结 - Summary
在卷积层中,每个隐藏单元通过对附近输入的加权求和、加上偏移量,并应用激活函数来计算。这些权重和偏移量在每个空间位置上都是相同的,因此与全连接网络相比,参数要少得多,并且不会随着输入图像的大小增加而增加。为了确保不丢失信息,这个操作会以不同的权重和偏移量在每个空间位置上重复进行,从而创建多个通道。
典型的卷积网络由卷积层和下采样因子为2的层交替组成。随着网络的进行,空间维度通常会减小两倍,通道数量会增加两倍。在网络的末尾,通常会有一个或多个完全连接层,用于整合整个输入的信息并生成所需的输出。如果输出是图像,则可以使用镜像的"解码器"将其上采样到原始大小。
卷积层的平移等变性对于基于图像的任务相对于全连接网络来说具有很大的好处,提高了性能。我们已经描述了图像分类、目标检测和语义分割网络。实验证明,随着网络的加深,图像分类的性能得到了改善。然而,随后的实验表明,无限增加网络深度并不能持续帮助;在一定深度之后,系统变得难以训练。这就是下一章将要讨论的"残差连接"的原因所在。
10.7 注意 - Notes
Dumoulin & Visin 2016对卷积的数学原理进行了详细阐述,扩展了本章的简要介绍。
卷积网络: 早期的卷积网络由Fukushima & Miyake 1982、LeCun et al. 1989a和LeCun et al. 1989b开发。最初的应用包括手写识别(LeCun et al., 1989a; Martin, 1993)、人脸识别(Lawrence et al., 1997)、音素识别(Waibel et al., 1989)、口语识别(Bottou et al., 1990)和签名验证(Bromley et al., 1993)。然而,卷积网络的普及始于LeCun et al., 1998,他们构建了一个名为LeNet的系统,用于对28×28像素的灰度手写数字图像进行分类。这个系统立即被认为是现代网络的前身;它使用一系列的卷积层,然后是全连接层,采用的是Sigmoid激活函数而不是ReLU,并且使用平均池化而不是最大池化。AlexNet(Krizhevsky et al., 2012)被广泛认为是现代深度卷积网络的起点。
ImageNet挑战赛:Deng et al., 2009收集了ImageNet数据库,并且相关的分类挑战推动了深度学习的进展,持续几年之后才被AlexNet超越。该挑战的后续优胜者包括network-in-network架构(Lin et al., 2014),该架构交替使用卷积层和全连接层,这些层在每个位置都独立地对所有通道进行操作(即1×1卷积)。Zeiler & Fergus 2014和Simonyan & Zisserman 2014训练了更大更深的架构,从根本上与AlexNet相似。Szegedy et al., 2017开发了一种称为GoogLeNet的架构,引入了inception blocks。这些块使用具有不同滤波器大小的若干并行路径,然后重新组合。这有效地使系统学习到了滤波器的大小。
性能的提高趋势是随着网络深度的增加而改善。然而,训练更深的网络最终变得困难,需要进行修改;这些修改包括残差连接和归一化层,下一章将对此进行描述。ImageNet挑战的进展总结在Russakovsky et al., 2015中。关于使用卷积网络进行图像分类的更一般的调查可以在Rawat & Wang 2017中找到。图10.21展示了图像分类网络随时间的改进情况。

图10.21 ImageNet性能。每个圆圈代表不同的已发布模型。蓝色圆圈代表当时的领先模型。本书中讨论的模型也被突出显示。AlexNet和VGG网络在当时是非常出色的,但现在已远非领先水平。ResNet-200和DenseNet在第11章中进行了讨论。ImageGPT,ViT,SWIN和DaViT在第12章中进行了讨论。来源:https://paperswithcode.com/sota/image-classification-on-imagenet。
卷积层的类型: 空洞卷积或膨胀卷积由Chen et al., 2018c和Yu & Koltun 2015引入。转置卷积由Long et al., 2015引入。Odena et al., 2016指出转置卷积可能会导致棋盘状伪影,应该谨慎使用。Lin et al., 2014是使用1×1滤波器的早期卷积示例。 许多优化参数数量的标准卷积层变种已经被提出。其中包括深度卷积和通道分离卷积(Howard等人,2017;Tran等人,2018),这些方法通过对每个通道进行单独卷积来创建一组新的通道。对于输入通道数为C,输出通道数也为C的K×K大小的卷积核,相比于常规卷积层的K×K×C×C参数,只需要K×K×C个参数。另一种相关方法是分组卷积(Xie等人,2017),其中每个卷积核仅应用于部分通道,从而减少参数数量。事实上,AlexNet为了计算效率使用了分组卷积;整个网络无法在单个GPU上运行,因此一些通道在一个GPU上处理,另一些通道在另一个GPU上处理,交互点有限。可分离卷积将每个卷积核视为一维向量的外积;对于每个通道,它们使用C+K+K个参数。部分卷积(Liu等人,2018a)用于修复丢失的像素,并考虑了输入的部分遮罩。门控卷积从前一层学习掩码(Y [u,et al.,2019];Chang等人,2019b)。Hu等人(2018b)提出了挤压激励网络,利用在所有空间位置上汇集的信息重新加权通道。
下采样和上采样方法: 平均池化可以追溯到LeCun等人(1989a),最大池化可以追溯到Zhou和Chellappa(1988)。Scherer等人(2010)比较了这些方法,并得出结论最大池化更优越。最大反池化方法由Zeiler等人(2011)和Zeiler和Fergus(2014)引入。最大池化可以看作是对要汇集的隐藏单元应用
Shi等人(2016)引入了PixelShuffle,它使用步幅为1/s的卷积滤波器将一维信号缩放s倍。它只使用位于每个位置上的权重来生成输出,而位于位置之间的权重则被丢弃。可以通过将卷积核中的通道数乘以
一维和三维卷积: 卷积神经网络通常被用于处理图像数据,但也被应用于一维数据的领域,例如语音识别(Abdel-Hamid等人,2012年)、句子分类(Zhang等人,2015年;Conneau等人,2017年)、心电图分类(Kiranyaz等人,2015年)以及轴承故障诊断(Eren等人,2019年)。关于一维卷积网络的研究可以在Kiranyaz等人(2021年)的论文中找到。此外,卷积神经网络也被应用于处理三维数据,例如视频(Ji等人,2012年;Saha等人,2016年;Tran等人,2015年)和体积测量(Wu等人,2015年;Maturana和Scherer,2015年)。
不变性和等变性: 卷积层的一个优点是在平移方面近似等变,而最大池化则使得网络对轻微平移具有不变性。Zhang(2019年)考察了卷积神经网络在这些属性上的实际表现,并提出了通过最大模糊池化修改来显著改善这些属性的方法。此外,还有很大的兴趣使网络对其他类型的变换,如反射、旋转和缩放等,具有等变性或不变性。Sifre和Mallat(2013年)构建了一个基于小波的系统,可以在图像块中诱导平移和旋转不变性,并应用于纹理分类。Kanazawa等人(2014年)开发了局部尺度不变的卷积神经网络。Cohen和Welling(2016年)利用群论构建了群卷积神经网络,它可以对更大范围的变换(包括反射和旋转)具有等变性。Esteves等人(2018年)提出了极坐标变换网络,它对平移具有不变性,对旋转和缩放具有等变性。Worrall等人(2017年)开发了调和网络,这是第一个对连续旋转具有等变性的群卷积神经网络的例子。
初始化和正则化: 卷积神经网络通常使用Xavier初始化(Glorot和Bengio,2010年)或He初始化(He等人,2015年)来进行参数初始化,具体可以参考第7.5节。然而,ConvolutionOrthogonal初始化器(Xiao等人,2018a年)是专为卷积神经网络设计的。使用这种初始化方法,可以训练具有多达10,000个层次的网络,而无需使用残差连接。
对于全连接网络,Dropout是一种有效的正则化方法,但对于卷积层来说效果较差(Park&Kwak,2016年)。这可能是因为相邻图像像素之间高度相关,因此如果一个隐藏单元被随机丢弃,相邻位置的隐藏单元可能仍然传递相似的信息。为了解决这个问题,提出了空间丢失(Tompson等人,2015年)方法,即整个特征图被随机丢弃,而不是单个像素。类似地,DeVries&Taylor(2017b年)提出了cutout方法,在训练时将每个输入图像的一个方形补丁遮挡起来。Wu&Gu(2015年)修改了最大池化的方法,用于dropout层,该方法涉及从概率分布中对组成元素进行采样,而不总是选择最大值。
自适应卷积核: Inception块(Szegedy等人,2017年)并行应用不同尺寸的卷积滤波器,从而使网络能够学习适当的滤波器尺寸。其他研究探讨了在训练过程中学习卷积尺度(例如Pintea等人,2021年;Romero等人,2021年)或下采样层的步长(Riad等人,2022年)。 在某些系统中,卷积核的大小会根据数据的特性进行自适应调整。这种情况有时出现在引导卷积的背景下,其中一个输入用于辅助另一个输入的计算。例如,可以使用RGB图像来辅助对低分辨率深度图进行上采样Jia et al.,2016。 Xiong et al.,2020b直接使用不同的网络分支预测滤波器的权重。 Su et al.,2019a通过从另一种模态学习的函数来调节固定卷积核的权重。 Dai et al.,2017学习权重的偏移量,以避免在规则网格上应用这些权重。
目标检测和语义分割: 目标检测方法可以分为基于提议和无提议两种方案。在前者中,处理分为两个阶段。卷积网络接收整个图像,并提出可能包含对象的区域。然后对这些提议区域进行调整大小,第二个网络分析它们以确定是否存在对象以及对象的属性。这种方法的早期例子是R-CNN(Girshick et al.,2014)。随后对其进行了扩展,以支持端到端训练(Girshick,2015)并减少提议区域的成本(Ren et al.,2015)。在特征金字塔网络上的后续工作通过结合多个尺度的特征来提高性能和速度Lin et al.,2017b。相比之下,无提议方案在一次处理中完成所有计算。YOLO(You Only Look Once)Redmon et al.,2016是无提议方案的最著名的例子,该方法在第10.5.2节中有详细描述。撰写本文时,YOLOv7(Wang et al.,2022a)是该框架的最新版本。有关目标检测的最新综述可参考Zou et al.,2023。
语义分割网络是由Noh et al.,2015开发的,详见第10.5.3节。许多后续的方法都是U-Net([Ronneberger et al.],2015)的变种,该方法在第11.5.3节中有详细描述。关于语义分割的最新综述可参考Minaee et al.,2021和Ulku & Akagündüz 2022。
可视化卷积网络: 卷积网络的巨大成功引发了一系列努力,旨在可视化它们从图像中提取的信息(参见Qin et al.,2018的综述)。Erhan et al.,2009通过从包含噪声的图像开始,使用梯度上升优化输入,使隐藏单元的激活达到最大值,并可视化激活该隐藏单元的最佳刺激。Zeiler & Fergus 2014训练一个网络来重构输入,然后将除了感兴趣的隐藏单元之外的所有隐藏单元置零;重构结果提供了驱动隐藏单元的信息。Mahendran,& Vedaldi 2015可视化了整个网络的一层。他们的“网络倒置”技术旨在找到一幅图像,使该层的激活与自然图像的统计特性相似。 2017年,Bau等人提出了一种名为“网络剖析”的方法。通过将一系列带有已知像素标签的图像输入网络,并测量隐藏单元与每个属性之间的关联性,该方法能够提供一些关于网络处理图像的局部洞察。这种方法的优势在于只需要使用网络的前向传递,而无需进行优化过程。这些方法确实为我们提供了一些关于网络处理图像方式的部分理解。例如,Bau等人的研究表明,较早的层与纹理和颜色更相关,而较后的层与物体类型更相关。然而,要完全理解一个包含数百万参数的网络的处理过程仍然是困难的。
10.8 问题 - Problems
问题10.1∗ 请证明方程10.4中的操作在平移方面是等变的。
问题10.2 写出与图10.3a-b中显示的一维卷积核大小为三、步长为二的等效方程。
问题10.3 写出一维扩张卷积的方程,卷积核大小为三,扩张率为二,如图10.3d所示。
问题10.4 写出一维卷积的方程,卷积核大小为七,扩张率为三,步长为三。
问题10.5 以图10.4d的样式绘制权重矩阵,分别为(i)图10.3a-b中的步进卷积,(ii)图10.3c中卷积核大小为5的卷积,以及(iii)图10.3d中的扩张卷积。
问题10.6 以图10.4d的样式绘制一个6×12的权重矩阵,将输入
问题10.7 以图10.4d的样式绘制一个12×6的权重矩阵,将输入
问题10.8 考虑一个有三个通道的一维卷积网络。第一个隐藏层使用大小为三的卷积核计算,并具有四个通道。第二个隐藏层使用大小为五的卷积核计算,并具有十个通道。对于这两个卷积层,需要多少个偏移量项和多少个权重?
问题10.9 网络由三个一维卷积层组成。在每一层中,应用具有大小为三、步长为一和扩张率为一的零填充卷积。第三层隐层单元的感受域大小是多少?
问题10.10 网络由三个一维卷积层组成。在每一层中,应用具有大小为七、步长为一和扩张率为一的零填充卷积。第三层隐层单元的感受域大小是多少?
问题10.11 考虑一个具有一维输入
问题10.12 图10.7中的一维卷积网络通过随机梯度下降训练,学习率为0.01,批量大小为100,训练数据集包含4,000个样本,共进行了100,000步。网络训练了多少个时代?
问题10.13 以图10.4d的样式绘制一个权重矩阵,显示了图10.9中的24个输入与24个输出之间的关系。
问题10.14 考虑一个具有5×5卷积核的二维卷积层,输入通道数为3,输出通道数为10。有多少个卷积权重?有多少个偏移量项?
问题10.15 以图10.4d的样式绘制一个权重矩阵,对一个一维输入采样每隔一个变量(即图10.11a的一维类比)。证明卷积核大小和步长为二的一维卷积的权重矩阵等价于将卷积核大小为一和该采样矩阵的矩阵组合。
问题10.16∗ 考虑AlexNet网络(图10.16)。每个卷积层和全连接层中使用了多少个参数?总参数数量是多少?
问题10.17 AlexNet的前三层的感受域大小分别是多少(图[10.16])?
问题10.18 VGG架构(图[10.17])中每个卷积层和全连接层有多少个权重和偏移量?
问题10.19 考虑一个大小为224×224、具有
- 第11章 残差网络 - Residual networks
第11章 残差网络 - Residual networks
在前一章中,我们了解到随着卷积网络层数的增加,从8层(AlexNet)扩展到18层(VGG),图像分类的性能得到了提升。然而,在尝试构建更深层次的网络时,性能却出现了下降。
本章将介绍残差块的概念。在残差块中,每个网络层计算的是当前表示的加性变化,而不是直接进行转换。这种方法可以训练更深的网络,但在初始化时,激活幅值会呈指数级增长。为了解决这个问题,残差块采用了批归一化技术,对每一层的激活值进行重新中心化和重新缩放。
11.1 顺序处理 - Sequential processing
到目前为止,我们所见到的每个神经网络都是按照顺序依次处理数据的。每一层接收上一层的输出,并将结果传递给下一层(参见图11.1)。例如,一个三层网络可以表示为以下形式:
其中

图11.1展示了顺序处理的方式,它是标准神经网络的一种传递方式。该方式将每一层的输出直接传递给下一层。
由于处理是顺序的,我们可以将这个网络等价地看作一系列嵌套的函数:
11.1.1 顺序处理的局限性 - Limitations of sequential processing
从理论上说,我们可以添加任意多的层。正如我们在上一章中所看到的,给卷积网络添加更多的层确实提高了性能。例如,具有十八层的VGG网络(图10.17)优于具有八层的AlexNet(图10.16)。然而,当进一步添加层时,图像分类性能再次下降(图11.2)。这一点令人惊讶,因为通常情况下,随着模型容量的增加,性能应该更好(图8.10)。实际上,我们发现这种下降现象在训练集和测试集上都存在,这意味着问题出现在训练更深的网络上,而不是深度网络本身无法泛化。

图11.2 添加更多的卷积层时性能下降
- a) 在CIFAR-10数据集的测试集上,一个由20层卷积网络组成的模型优于一个由56层全连接神经网络组成的模型([Krizhevsky & Hinton], 2009)。
- b) 这个现象在训练集上同样存在,这表明问题出现在训练原始网络时,而不是在无法在新数据上进行泛化。参考文献He et al. , 2016a。
这种现象目前还没有完全被理解。有一种猜测是,当我们在网络的早期层修改参数时,在初始化时,损失的梯度会以一种不可预测的方式改变。通过适当地初始化权重(参见第7.5节),损失相对于这些参数的梯度将会是合理的(即没有爆炸或消失的梯度)。然而,导数的假设是参数的变化是无限小的,而实际的优化算法使用的步长是有限的。因此,任何合理的步长选择都可能会导致算法移动到一个完全不同且无关的梯度的地方。损失曲面看起来像是一系列微小的山脉,而不是一个易于下降的单一平滑结构。因此,当损失函数的梯度变化较慢时,算法无法像在损失函数的梯度变化较快时那样取得进展。
这项研究发现,对于具有单一输入和输出的网络梯度而言,存在一种经验性观察来支持这个猜想。首先,对于浅层网络来说,即使改变输入,输出相对于输入的梯度变化速度较慢(图11.3a)。然而,对于深层网络来说,即使输入微小变化,梯度完全不同(图11.3b)。这种现象可以通过梯度的自相关函数来描述(图11.3c)。对于浅层网络来说,相邻的梯度之间存在相关性,但是对于深层网络来说,这种相关性迅速减弱,最终趋近于零。这种现象被称为“破碎梯度”。

图11.3 展示了破碎的梯度现象。
- a) 考虑一个浅层网络,其中有200个隐藏单元,并且使用Glorot初始化(即没有乘以2的He初始化)来初始化权重和偏置。对于标量网络输出
对标量输入 的梯度 ,随着输入 的变化而变化得相对缓慢。 - b) 然而,当网络变得更深,比如有24层,每层200个隐藏单元时,这个梯度变化得非常快且不可预测。
- c) 梯度的自相关函数显示,对于深度网络来说,附近的梯度变得不相关(自相关接近零)。这种 破碎梯度 现象可能解释了为什么训练深度网络很困难。梯度下降算法依赖于损失曲面相对平滑,因此每次更新步骤前后的梯度应该是相关的。引自 Balduzzi 等人,2017。
破碎梯度可能是因为随着网络变得更深,早期网络层的变化会以越来越复杂的方式修改输出。在方程11.1中,输出
11.2 残差连接和残差块 - Residual connections and residual blocks
残差连接或跳跃连接是计算路径中的一个分支,它将每个网络层的输入
其中,每行右侧的第一项是残差连接。每个函数
为了更清楚地表达,我们省略了参数

图11.4 展示了残差连接。
- a) 每个函数
的输出被添加到其输入中,通过一条被称为残差连接或跳跃连接的并行计算路径进行传递。因此,该函数计算了对表示的加性改变。 - b) 分解网络方程后,我们发现输出由输入和四个较小的网络组成(分别对应于白色、橙色、灰色和青色,在方程[11.5]中有提及)。我们可以将这个输出看作是一个网络的集合。此外,青色网络的输出本身是另一个集合的一个变换
,以此类推。或者,我们可以将网络视为计算图中16个不同路径的组合。一个示例是从输入 到输出 的虚线路径,在图(a)和图(b)中是相同的。
关于这个残差网络,我们可以用另一种方式来理解它,即将其看作是由十六条不同长度的路径从输入到输出的组合而成。举例来说,第一个函数
这里每个路径对应一个项,右侧的恒等项表示第一层的参数
11.2.1 残差块中的操作顺序 - Order of operations in residual blocks
迄今为止,我们假设加性函数
因此,在一般情况下,我们会改变操作的顺序,首先应用激活函数,然后进行线性变换(如图11.5b所示)。在残差块中,有时会有多层处理(如图11.5c所示),但通常最后一层是线性变换。此外,我们需要注意到,如果初始网络输入为负数,并且使用ReLU操作,那么这些块将不起作用,因为ReLU会将整个信号剪切为零。因此,通常情况下,我们会从线性变换开始构建网络,而不是从残差块开始,如图11.5b所示。

图11.5 剩余块中的操作顺序。
- a) 一般来说,线性变换或卷积之后跟随ReLU非线性意味着每个剩余块只能增加非负量。 b) 通过采用逆序方法,我们可以同时添加正数和负数。然而,如果输入全是负数,我们就需要在网络的起始位置添加一个线性变换。 c) 在实际应用中,一个残差块通常由多个网络层组成。
11.2.2 更深的网络中的残差连接 - Deeper networks with residual connections
通过添加残差连接,我们可以在不降低性能的情况下增加网络的深度至两倍。然而,我们希望进一步提高网络的深度。为了理解为什么不能随意增加残差连接的深度,我们需要考虑前向传播中激活值的方差变化以及反向传播中梯度大小的变化。
11.3 残差网络中的梯度爆炸问题 - Exploding gradients in residual networks
在第7.5节中,我们已经了解到参数初始化的重要性。如果没有正确初始化,反向传播过程中的中间值可能会呈指数级增长或减少。同样,在进行网络的反向传播时,梯度可能会出现爆炸或消失的问题。
因此,为了确保网络的各个层之间的激活和梯度方差保持不变,我们需要对网络参数进行初始化。对于使用ReLU激活函数的情况,我们将偏置项β初始化为零,并选择均值为零、方差为
接下来,让我们来考虑一下残差网络。由于每个层都直接对网络输出有贡献,因此我们不需要担心中间值或梯度随着网络深度增加而消失(参见公式[11.5]和图[11.4b])。然而,即使我们在残差块中使用了He初始化,正向传播中的值也会随着网络深度的增加而指数级增加。
为了解释这个现象,我们可以考虑将处理结果添加到残差块中,然后将其与输入相加。每个分支都有一些不相关的变异性。因此,当我们重新组合它们时,整体方差会增加。在使用ReLU激活函数和He初始化的情况下,每个块的处理不会改变期望方差。因此,当我们将其与输入重新组合时,方差会翻倍(见图11.6a()),并且随着残差块数量的增加呈指数增长。这限制了在前向传播过程中网络深度可能超过的浮点精度。类似的论证也适用于反向传播算法中的梯度反向传递。

图11.6显示了残差网络中方差的情况。
- a) 在残差网络中,每个块的输入会与输出相加,这会导致方差在每一层都增加一倍。这种指数级增长的方差可以在图中的灰色数字中看到。为了确保在线性加ReLU层
之后预期的方差保持不变,我们需要对残差网络进行初始化。 - b) 一种方法是在每个残差块之间通过
对信号进行重新缩放。这样可以有效地控制方差的增长,使其保持在可接受的范围内。 - c) 第二种方法是将批量归一化(BN)作为残差块的第一步,并将关联的偏移
初始化为零,缩放 初始化为一。这样可以确保每个层的输入具有单位方差,并且通过 He 初始化,输出方差也将为一。使用这种方法,方差随着残差块的数量线性增加。需要注意的是,在初始化阶段,网络的后续层由残差连接主导,因此接近于计算恒等式。这些方法的副作用是在初始化阶段网络的后续层更多地依赖于残差连接,而接近于计算恒等式。
因此,即使我们使用了He初始化的方法,残差网络仍然存在前向传播不稳定和梯度爆炸的问题。为了解决这个问题,可以采用He初始化的方法,并且将每个残差块的组合输出乘以
11.4 批量归一化 - Batch normalization
批量归一化(BatchNorm),也被称为Batch Normalization,对每个激活值
这里的
其中
最后,我们对归一化的激活值进行缩放和平移操作,分别乘以
经过这个操作后,批次中的激活值具有平均值
批归一化是一种独立应用于每个隐藏单元的技术。在标准神经网络中,如果网络有
11.4.1 批归一化的成本与收益 - Costs and benefits of batch normalization
批归一化技术使得神经网络在重新缩放权重和偏差时具有不变性,这些权重和偏差会影响到每个激活函数。如果权重和偏差被放大了,激活函数的输出也会相应地放大,导致估计标准差
稳定的前向传播: 如果我们将偏差
这意味着在初始化时,后面的层对总体变化的影响要比前面的层小。在训练初期,网络实际上变得不那么深,因为后面的层趋近于计算恒等映射。随着训练的进行,网络可以逐渐增加后面层的缩放因子
更高的学习率: 实证研究和理论都表明,批量归一化可以使损失曲面及其梯度变得更平滑,从而减少碎片化梯度的问题。这意味着我们可以使用更高的学习率,因为曲面更可预测。正如我们在9.2节中所见,较高的学习率可以改善测试性能。
正则化: 此外,在第9章中我们发现,引入噪声到训练过程可以提升模型的泛化能力。批量归一化会引入噪声,因为归一化依赖于批次统计信息。激活函数对于给定的训练样本会在每个训练迭代中以稍微不同的方式进行调整,通过与批次中其他成员的归一化。
11.5 常见的残差网络结构 - Common residual architectures
残差连接已经成为深度学习流水线中的标准组件。本节将回顾一些将残差连接纳入结构的著名网络架构。
11.5.1 ResNet - ResNet
在卷积神经网络中,引入了一种创新概念,被命名为残差块,首次应用于图像分类任务。基于这一概念构建的网络被称为残差网络,简称ResNet。在ResNet中,每个残差块由批归一化操作、ReLU激活函数和卷积层组成。这些操作按照相同的顺序重复进行,并将结果与输入相加(如图11.7a所示)。实验证明,在图像分类任务中,这种操作顺序表现出色。
当网络非常深时,参数的数量可能变得非常庞大。为了更有效地利用参数,引入了一种称为瓶颈残差块的结构,它由三个卷积层组成。第一个卷积层使用大小为1×1的卷积核来降低通道数。第二个卷积层使用常规的3×3卷积核,而第三个卷积层再次使用大小为1×1的卷积核将通道数增加到原始数量(如图11.7b所示)。通过这种方式,我们可以用更少的参数来整合一个3×3的像素区域中的信息。

图11.7 ResNet块。
- a) 在ResNet架构中,标准块由批量归一化操作,激活函数和一个3×3的卷积层组成,并且这个序列被重复多次。
- b) 瓶颈ResNet块也是在3×3的区域内整合信息,但使用的参数更少。它包含三个卷积操作。第一个1×1的卷积操作用于减少通道数。第二个3×3的卷积操作应用于较小的表示。最后一个1×1的卷积操作再次增加通道数,以便可以将其与输入相加。
ResNet-200模型(见图11.8)是用于在ImageNet数据库(见图10.15)上进行图像分类的模型,它包含200个层。这个模型的结构与AlexNet和VGG类似,但是使用了瓶颈残差块而不是普通的卷积层。与AlexNet和VGG一样,这些块会周期性地降低空间分辨率并增加通道数量。为了降低分辨率,我们使用步幅为2的卷积进行降采样操作。通道数量可以通过在表示中添加零或使用额外的1×1卷积进行增加。在网络的开头,我们使用一个7×7的卷积层,并进行降采样操作。最后,一个全连接层将块映射到一个长度为1000的向量。这个向量经过softmax层处理,生成类别概率。

图11.8 展示了ResNet-200模型的结构。 首先,我们使用步长为2的标准7×7卷积层进行卷积操作,然后进行MaxPool操作。 接下来是一系列的瓶颈残差块(括号中的数字表示经过第一个1×1卷积之后的通道数)。在这些块中,我们周期性地进行下采样,并相应地增加通道数。 最后,网络通过对所有空间位置进行平均池化,再经过一个全连接层进行预softmax激活。
在前五个正确类别的识别中,ResNet-200模型取得了引人注目的4.8%错误率,并且在正确识别正确类别方面达到了20.1%的准确率。相比之下,AlexNet(16.4%,38.1%)和VGG(6.8%,23.7%)的表现稍显逊色。ResNet-200成为了首批超越人类表现的网络之一,其在前五个猜测中的错误率仅为5.1%。虽然这个模型是在2016年设计的,已经有一段时间了,并不再是最先进的。最新的研究显示,在这一任务上表现最好的模型的错误率为9.0%(参见图10.21)。值得注意的是,目前所有在图像分类任务中表现最佳的模型都是基于Transformer的(参见第12章)。
11.5.2 DenseNet - DenseNet
DenseNet采用了一种不同的方法,即通过密集连接的方式将前一层的输出与当前层的输入相连接。这种连接方式的优点是可以增加表示的大小(每个密集块的输出特征图的通道数量会增加)。然而,我们可以通过一个可选的线性变换来映射回原始尺寸,这相当于在卷积网络中应用一个1×1卷积。这样的设计使得模型能够将表示相加、取加权和,或以更复杂的方式进行组合。
DenseNet架构通过拼接的方式将每一层的输入与之前所有层的输出进行拼接,形成一个新的表示。这种拼接后的表示被传递给下一层进行处理。这种拼接的方式使较早的层对输出的贡献更加直接,从而使损失函数的曲面更加合理。具体来说,每一层的输入都包含了之前所有层输出的拼接结果(参见图[11.9]),经过处理后形成新的表示,然后与之前的表示进行拼接,并传递给下一层。这种方式使得较早的层对输出的影响更加明显,从而提升了模型的性能。

图11.9 在密集连接网络(DenseNet)中,我们采用了残差连接的方式来连接较早层的输出和后续层。这种网络结构能够将输入的三通道图像转换为32通道的表示。将输入图像与其连接后,我们总共得到了35个通道。然后,我们将这个组合表示转换为另一个32通道的表示,并将前面的两个表示连接起来,总共得到了67个通道,以此类推。
在实际应用中,这种方法只适用于较小规模的网络层级,因为通道数量和需要处理的参数数量会逐渐增多。为了解决这个问题,在应用下一个3×3的卷积之前,我们可以通过使用一个1×1的卷积来减少通道数量。在卷积神经网络中,输入会定期进行下采样。由于不同尺寸的表示,跨下采样的连接变得没有意义。因此,在这一点上,连接的链条会被断开,并且由一个较小的表示开始一个新的链条。此外,在进行下采样时,可以应用另一个瓶颈1×1的卷积来进一步控制表示的大小。
这个网络在图像分类方面与ResNet模型具有竞争力(参见图[10.21]);事实上,对于在一定参数数量范围内来说,它可能比ResNet模型表现得更好。这可能是因为它可以更灵活地复用较早层级的处理过程。
11.5.3 U-Net和Hourglass网络 - U-Nets and hourglass networks
在10.5.3节中,我们介绍了一种用于语义分割的网络,采用了编码器-解码器或沙漏结构。编码器通过多次下采样对图像进行处理,以增加感受野并整合来自整个图像的信息。然后解码器通过上采样将图像恢复到原始大小。最终输出是每个像素可能属于的物体类别的概率。然而,这种架构存在一个缺点,即网络中间的低分辨率表示需要保留高分辨率的细节信息,以便准确地生成最终结果。然而,如果在编码器和解码器之间使用残差连接来将编码器的表示传递给解码器,这样的操作就是不必要的。
U-Net(见图11.10)是一种编码器-解码器结构的网络,通过将较早的特征与较后的特征进行连接来进行工作。最初的实现中使用了“valid”卷积,这意味着每次应用3×3卷积层时,空间尺寸会减小两个像素。因此,解码器中的上采样版本比编码器中的对应版本要小,需要在连接之前进行裁剪。后来的实现中采用了零填充,从而避免了裁剪的需要。需要注意的是,U-Net是一个完全卷积的网络,在训练之后可以用于处理任意尺寸的图像。

图11.10 展示了U-Net在HeLa细胞分割中的应用。U-Net采用了编码器-解码器的结构。
- 首先,编码器进行下采样(橙色块),然后进行上采样(蓝色块)。
- 编码器使用常规卷积,而解码器则使用转置卷积。
- 为了保持信息的流畅传递,U-Net采用了残差连接的方法。这意味着编码器中每个尺度的最后一个表示将会与解码器中相同尺度的第一个表示进行连接(橙色箭头)。
- 由于原始的U-Net使用了“valid”卷积,即使没有下采样,每层的大小也会略微减小。因此,在连接到解码器之前,编码器获得的表示会被裁剪(虚线方框)。 这个图表改编自Ronneberger等人,2015年的研究。
U-Net最初是为了医学图像分割而设计的(见图11.11),但后来在计算机图形和视觉领域发现了许多其他的应用。与U-Net相似,Hourglass网络在跳跃连接中应用了更多的卷积层,并将结果添加到解码器中,而不是简单地连接它们。一系列这样的模型形成了一个堆叠的Hourglass网络,在局部和全局层面上交替考虑图像。这样的网络被用于姿势估计(见图11.12)。系统被训练来预测每个关节的“热点图”,并估计每个热点图的最大值位置。

图11.11 使用U-Net进行三维分割。
- a) 通过扫描电子显微镜拍摄的由三个切片组成的小鼠皮层的三维体积。
- b) 使用单个U-Net将体素分类为神经突起内部或外部,连接区域用不同颜色标识。

图11.12 展示了一个堆叠的沙漏网络用于姿态估计。
- a) 该网络接受一个人的图像作为输入,并输出一组热图,其中每个关节对应一个热图。这个问题被设计为回归问题,目标是生成具有小的高亮区域的热图图像,这些区域标记了真实关节的位置。通过估计热图的峰值,可以确定每个关节的最终位置。
- b) 这个架构包含初始的卷积层和残差层,后面是一系列的沙漏模块。
- c) 每个沙漏模块都由一个编码器-解码器网络组成,类似于U-Net的结构。但是,在这个架构中,卷积层使用零填充,并且一些额外的处理是在残差连接中完成的。这些连接将处理后的表示加在一起,而不是将它们连接起来。每个蓝色的长方体本身就是一个瓶颈残差块(参见图11.7b)。这个图示修改自Newell等人的论文(2016年)。
11.6 为什么具有残差连接的网络表现如此出色? - Why do nets with residual connections perform so well?
残差网络之所以表现出色,原因在于它具备以下两个优势。
- 首先,它允许我们构建更深层次的网络架构,甚至可以达到1000层以上,而仍然能够有效地进行训练。
- 其次,它能够克服传统网络中的梯度消失和梯度爆炸问题。
尽管最初人们普遍认为残差连接的性能提升是由于增加了网络的深度,但有两个证据与这一观点相矛盾。
- 首先,增加网络深度并不总是能够带来性能的提升,而有可能导致性能下降。
- 其次,即使在相同的网络深度下,具有残差连接的网络仍然能够比传统网络表现更好。
因此,残差连接的优势并不仅仅来源于网络的深度,还与其独特的设计有关。这种设计可以有效地传递信息和梯度,避免了梯度消失和梯度爆炸问题,从而提高了网络的收敛速度和训练效果。这也是残差网络在图像分类等任务中表现出色的原因之一。
首先,相较于层数较深而通道较少的网络结构,残差网络的层数较浅,但每层的通道数较多,有时表现更优。换句话说,通过使用层数较少但通道数较多的网络结构,我们有时可以获得更好的性能。
其次,有证据表明,在深度网络中,梯度可能无法有效地传播到非常长的路径上(图11.4b)。换句话说,一个非常深的网络可能更像是多个较浅网络的组合。
目前的观点认为,残差连接不仅可以帮助训练更深的网络,还可以为网络带来附加的价值。支持这一观点的理由是,在移除跳跃连接时,残差网络的损失曲面通常在最小值附近更加平滑和可预测(图11.13)。这使得更容易学习到一个具有良好泛化性能的解决方案。

图11.13 展示了可视化的神经网络损失曲面。每张图都展示了在参数空间中随机梯度下降(SGD)找到的最小值周围的两个随机方向上的损失曲面,用于CIFAR-10数据集上的图像分类任务。这些方向经过归一化处理,以便进行比较。
- a) 展示了一个由56层组成的残差网络。
- b) 展示了同样的网络,但没有跳跃连接。
可以看到,具有跳跃连接的网络表面更加平滑,更容易学习,并且在参数微小错误的情况下更加鲁棒,因此可能具有更好的泛化能力。图片改编自Li等人(2018)。
11.7 总结 - Summary
当神经网络的深度无限增加时,图像分类的训练和测试性能会下降。这可能是因为网络中早期参数的损失梯度相对于更新步长的变化过快且不可预测。为了解决这个问题,我们引入了残差连接,即在原始输入上添加经过处理的表示。现在,每个层都直接对输出做出贡献,并且同时贡献于输出,因此不需要通过多个层传播梯度,并且损失曲面更加平滑。
在残差网络的前向传播过程中,我们不会遇到梯度消失的问题。然而,这种网络架构可能会导致激活值的方差呈指数级增加,同时也带来了梯度爆炸的问题。为了解决这些问题,我们通常会引入批量归一化(batch normalization)层。批量归一化通过计算每个批次的经验均值和方差,并使用学习到的参数进行移位和重新缩放,从而对激活值进行补偿。当这些参数被适当地初始化后,我们可以训练非常深的网络。
研究表明,残差连接和批量归一化使得损失函数的曲面更加平滑,从而可以使用更大的学习率。此外,批量统计数据的变化还提供了一种正则化的来源,进一步增强了网络的泛化能力。
残差块已经成功应用于卷积网络中。这些块的引入使得网络可以更深层次地进行训练,从而提高了图像分类的性能。除了传统的残差网络,还有一些变体被提出并应用于不同的任务中。例如,DenseNet架构将前一层的所有输出连接在一起,作为当前层的输入,以增强特征的流动性。还有U-Net,它在编码器-解码器模型中使用残差连接来实现更好的信息传递和细节保留。这些变体的引入为深度学习带来了更多的灵活性和性能提升的机会。
11.8 注解 - Notes
残差连接: 残差连接是由何凯明等人(2016a)引入的。他们构建了一个比VGG网络(图10.17)大8倍的152层网络,并在ImageNet分类任务上取得了最先进的性能。每个残差块由一个卷积层、批归一化、ReLU激活函数、第二个卷积层和第二个批归一化层组成。在将该块添加回主要表示之后,应用第二个ReLU函数。这个架构被称为ResNet v1。何凯明等人(2016b)研究了不同的残差架构变体,其中要么(i)在跳跃连接上也可以应用处理,要么(ii)在两个分支重新结合之后可以应用处理。他们得出结论,这两种处理都不是必需的,因此得到了图11.7所示的架构,有时被称为预激活残差块,即ResNet v2的骨干。他们训练了一个包含200层的网络,进一步改进了ImageNet分类任务的性能(见图11.8)。自那时以来,关于正则化、优化和数据增强的新方法已经被开发出来。Wightman等人(2021)利用这些方法提出了一个更现代的ResNet架构的训练流程。
为什么残差连接有助于训练: 残差网络的出现确实使得对深层网络的训练变得更加容易。这可能是因为它可以减少训练初期的梯度消失问题(Balduzzi等人,2017),并且在接近极小值的区域具有更加平滑的损失曲面,如图11.13所示(Li等人,2018b)。仅使用残差连接(没有批归一化)可以使网络的可训练深度增加约两倍(Sankararaman等人,2020)。通过使用批归一化,我们可以训练非常深的网络,但目前还不清楚深度对性能是否至关重要。Zagoruyko和Komodakis(2016)的研究表明,仅有16层的宽残差网络在图像分类方面超过了当时所有的残差网络。Orhan和Pitkow(2017)提出了另一种解释,即残差连接改善了学习过程中奇异点(损失曲面上的Hessian矩阵退化点)的消除。
相关架构: 残差连接是高速网络(Srivas等人,2015)的一种特殊形式。高速网络将计算分为两个分支,并通过加法重新组合。高速网络使用门控函数对两个分支的输入进行加权,权重取决于数据本身。而残差网络则以一种直接的方式将数据发送到两个分支。Xie等人(2017)引入了ResNeXt架构,在多个并行的卷积分支周围设置了残差连接。
残差网络作为一种集合模型: Veit等人(2016年)将残差网络描述为一种由多个较短网络组成的集合模型,并提出了“展开网络”的解释(见图11.4b)。他们通过从已经训练好的网络中删除层(即路径的子集)发现,这对性能只有适度的影响,从而证明了这种解释的有效性。相比之下,对于像VGG这样的纯顺序网络,删除一层会造成灾难性的影响。研究还展示了在不同长度路径上的梯度大小,并显示在较长的路径中梯度很容易消失。在由54个块组成的残差网络中,几乎所有的梯度更新都来自于长度为5到17个块的路径,尽管这些路径只占总路径的0.45%。因此,增加更多的块实际上是添加了更多的并行较短路径,而不是创建一个真正更深的网络。
残差网络的正则化: 对于权重进行L2正则化,在普通的网络和没有批归一化的残差网络中产生不同的效果。在普通网络中,L2正则化的目标是使该层的输出成为一个常数函数,该常数由偏置确定。而在残差网络中,L2正则化的目标是使残差块计算出一个由偏置确定的恒等映射加上一个常数。
对于残差网络,已经研发出了几种特定的正则化方法。这些方法包括ResDrop(Yamada等,2016年)、随机深度(Huang等,2016年)和RandomDrop(Yamada等,2019年)。这些方法通过在训练过程中随机丢弃残差块来对残差网络进行正则化。在RandomDrop方法中,丢弃块的倾向性由伯努利变量确定,其参数在训练过程中逐渐减小。在测试时,残差块以其期望概率被重新添加到网络中。这些方法实际上是dropout的一种变体,其中一个块中的所有隐藏单元同时被丢弃。在残差网络的多路径视图中(图11.4b),这些方法只是在每个训练步骤中删除一些路径。此外,Wu等人(2018b年)还开发了一种名为BlockDrop的方法,在运行时根据现有网络的分析结果决定使用哪些残差块,以提高推理的效率。
在残差块中,除了使用多条路径之外,还有其他正则化方法被提出。其中,Shake-shake(Gastaldi, 2017a, b)在前向传递和后向传递过程中随机重新加权路径。在前向传递中,可以将其视为对合成随机数据的加权,而在后向传递中,可以将其视为向训练过程中注入另一种形式的噪声。此外,ShakeDrop(Yamada等, 2019)引入了一个伯努利变量,用于决定每个块在训练步骤中是受到Shake-Shake的影响,还是像标准残差单元一样进行操作。
批归一化: 批归一化是由Ioffe和Szegedy(2015年)引入的一种方法,不仅适用于残差网络,还适用于其他网络结构。他们的实验结果显示,批归一化能够提高学习速度和收敛速度,并能够更有效地利用sigmoid激活函数(因为通过控制输出分布,避免了sigmoid函数饱和的问题)。Balduzzi等人(2017年)对具有ReLU函数初始化的深度网络中后续层的隐藏单元激活进行了研究。他们发现,许多隐藏单元在输入变化时都会保持激活或非激活状态,但通过批归一化可以减少这种不必要的趋势。
尽管批归一化在网络中有助于稳定信号的传播,但研究人员发现,在没有跳跃连接的ReLU网络中,它可能导致梯度爆炸的问题。每一层都会导致梯度幅值增加
批归一化化的变体: 已经提出了几种批归一化的变体(见图11.14)。批归一化是根据整个批次中收集到的统计数据分别对每个通道进行归一化。其中,Ghost批归一化或GhostNorm(Hoffer et al,2017)只使用部分批次来计算归一化统计数据,这样使得统计数据更加嘈杂,并且在批次大小非常大时增加了正则化的程度(见图11.14b)。
在自然语言处理领域,当批量大小非常小或者批次内的波动非常大时,BatchNorm(批归一化)的统计数据可能变得不可靠。为了解决这个问题,Ioffe(2017)提出了批次重标定的方法。这种方法通过保持对批次统计数据的累积平均值,并对任何批次的归一化进行修改,以确保它更具代表性。
另一个与批归一化相关的问题是,在递归神经网络中(用于处理序列的网络,其中上一个输出被反馈作为附加输入,随着序列的推进而移动),批归一化并不适用。在这种情况下,统计数据必须在序列的每一步中存储,并且如果测试序列比训练序列更长,则不清楚应该如何处理。
第三个问题是,批归一化需要访问整个批次的数据。然而,在训练分布在多台机器上时,获得整个批次数据可能并不容易。 层归一化(LayerNorm)或称为层级归一化(Ba et al., 2016)通过对每个数据示例进行归一化来避免使用批次统计信息,并使用跨通道和空间位置收集的统计数据(图11.14c)。然而,每个通道仍然有单独的学习尺度γ和偏移δ。
组归一化(GroupNorm)或称为分组归一化(Wu & He, 2018)类似于层归一化,但将通道分成组,并分别计算每个组内通道和空间位置的统计数据(图11.14d)。同样,每个通道仍然有单独的尺度和偏移参数。
实例归一化(InstanceNorm)或称为实例级归一化(Ulyanov et al., 2016)将这一概念推到了极致,其中组的数量与通道的数量相同,因此每个通道都单独进行归一化(图11.14e),仅使用在空间位置上收集的统计数据。
Salimans & Kingma(2016)研究了对网络权重进行归一化而不是激活值,但这在经验上的成功较少。Teye等人(2018)引入了蒙特卡洛批归一化,可以对神经网络的预测提供有意义的不确定性估计。最近的研究(Lubana et al., 2021)对不同归一化方案的属性进行了比较。

图11.14展示了不同的归一化方案。
- a) BatchNorm使用整个批次和空间位置收集的统计数据,对每个通道进行单独的调整。
- b) Ghost BatchNorm则只从部分批次中计算这些统计数据,以增加多样性。
- c) LayerNorm则根据每个批次成员、通道和空间位置分别收集的统计数据进行计算,同时保留了每个通道的独立学习缩放因子。
- d) GroupNorm在每个通道组内进行归一化,同时保留了每个通道的独立比例因子和偏移参数。
- e) InstanceNorm在每个通道内进行归一化,仅计算跨空间位置的统计数据。本图改编自Wu和He(2018年)的研究。
BatchNorm的作用原理: BatchNorm在控制残差网络(图11.6c)的初始梯度方面起着重要作用。然而,BatchNorm提高性能的具体机制尚不清楚。Ioffe & Szegedy, 2015的论文提出了减少由于前向传播更新前面层而导致输入分布的内部共变量转移问题的目标。然而,Santurkar等人,2018的研究通过人为引发共变量转移的实验结果表明,在具有和不具有BatchNorm的网络中,性能是相同的,这对前述观点提供了支持。
受到这一发现的启发,研究者们开始探索另一种解释,即批归一化如何改善模型性能。他们进行了一系列实验证明,在VGG网络中引入批归一化后,损失函数及其梯度在梯度方向上的变化减小了。换句话说,损失曲面变得更加平滑且变化更加缓慢,因此可以使用更大的学习率。此外,他们还提供了理论证明,无论参数初始化如何,批归一化的网络都能更接近于全局最优解。对此,Bjorck等人认为批归一化改善了损失函数的特性,使得可以使用更大的学习率。
为什么批量归一化(BatchNorm)能够提高性能,还有其他的解释,包括减少调整学习率的重要性(Ioffe&Szegedy,2015;Arora等,2018)。实际上,Li&Arora(2019)的研究表明,使用指数增长的学习率调度与批量归一化是可行的。最终,这是因为批量归一化使网络对权重矩阵的尺度不变(有关直观可视化,请参见Huszár,2019)。
Hoffer等(2017)的研究发现,批量归一化具有正则化效果,这是由于批次的随机组合引起的统计波动。他们提出了一种使用“幽灵批次大小”的方法,其中均值和标准差的统计信息是从批次的子集计算的。现在可以使用较大的批次而不会失去较小批次中额外噪声的正则化效果。Luo等(2018)进行了批量归一化正则化效果的研究。
替代方案: 尽管批量归一化(BatchNorm)被广泛应用于训练深度残差网络,但并非必选方案。实际上,还有其他方法可以使损失曲面更易处理。Balduzzi等人(2017)提出了一种名为
其他研究还尝试对残差块的函数输出进行重新缩放,并将其与输入相加。例如,De和Smith(2020)提出了一种名为SkipInit的方法,在每个残差分支的末尾添加了一个可学习的标量乘法器。他们建议将该乘法器初始化为小于
2019年,张等人提出了一种名为FixUp的方法,用于初始化深度残差网络。该方法采用了He归一化初始化每一层,但将每个残差块的最后一个线性/卷积层设为零。这种做法的结果是,初始的正向传播是稳定的(因为每个残差块没有贡献),并且反向传播中的梯度不会爆炸(由于相同的原因)。此外,他们通过重新调整分支的方式,使得参数的总预期变化的大小保持恒定,不会受到残差块数量的影响。
然而,尽管这些方法可以用于训练深度残差网络,但通常无法达到与使用BatchNorm时相同的测试性能。这可能是因为它们没有利用批次统计噪声引发的正则化。为了解决这个问题,2020年,德和史密斯对这些方法进行了修改,引入了dropout来进行正则化,从而帮助缩小这一差距。
DenseNet 和 U-Net: DenseNet 是由黄等人在2017年首次提出的,而U-Net是由Ronneberger等人在2015年开发的,stacked hourglass networks 则是由Newell等人在2016年提出的。在这些架构中,U-Net已经被广泛应用。Çiçek等人在2016年提出了3D U-Net,Milletari等人在2016年提出了V-Net,这两种方法将U-Net扩展到了处理3D数据。Zhou等人在2018年结合了DenseNet和U-Net的思想,在一个架构中同时使用了下采样和重新上采样图像,并重复使用中间表示。U-Net在医学图像分割中得到了广泛应用(详见Siddique等人,2021的综述)。然而,它们也被应用于其他领域,包括深度估计(Garg等人,2016),语义分割(Iglovikov和Shvets,2018),修复(Zeng等人,2019),PAN 影像融合(Yao等人,2018),以及图像到图像的转换(Isola等人,2017)。U-Net也是扩散模型(第18章)中的关键组件。
11.8 问题 - Problems
问题 11.2 如果有(i) 三个残差块和(ii) 五个残差块,展开图11.4a将产生多少条长度为零、一、二、三和四的路径?推导出关于残差块个数
问题 11.3 如何证明方程11.5中网络对第一层
问题 11.4 ∗ 为什么图11.6a中残差块的两个分支的值是不相关的?证明不相关变量的和的方差等于它们各自方差的和。
问题11.5 给定一组标量值

图11.15 批归一化的计算图(参见问题11.5)。
其中
问题11.6 考虑一个全连接神经网络,它有一个输入,一个输出和十个隐藏层,每个隐藏层包含二十个隐藏单元。这个网络有多少个参数?如果我们在每个线性变换和ReLU之间添加批量归一化操作,它将有多少个参数?
问题11.7 考虑对图11.7a中的卷积层的权重应用L2正则化惩罚,但不对接下来的BatchNorm层的缩放参数应用正则化。随着训练的进行,你认为会发生什么?
问题11.8 考虑一个卷积残差块,其中包含一个批量归一化操作,接着是一个ReLU激活函数,然后是一个3×3的卷积层。如果输入和输出都有512个通道,需要多少个参数来定义这个块?现在考虑一个瓶颈残差块,其中包含三个批量归一化/ReLU/卷积序列。第一个序列使用1×1的卷积将通道数量从512减少到128。第二个序列使用3×3的卷积,输入和输出通道数相同。第三个序列使用1×1的卷积将通道数量从128增加到512(参见图11.7b)。需要多少个参数来定义这个块?
问题11.9 U-Net是完全卷积的,可以在训练之后对任意大小的图像进行运行。为什么我们不使用一组任意大小的图像进行训练?
[译]第12章 Transformers 《理解深度学习 - Understanding Deep Learning》

本文是基于Simon J.D. Prince 的新书《Understanding Deep Learning》翻译而来;
- 原书介绍、原书(英文)下载、译文进展 以及 译文内容请戳 ↓↓↓
- [译]《理解深度学习 - Understanding Deep Learning 》 - 目录&前言 - ATA (atatech.org)
↓↓↓ 以下正文↓↓↓
- 第12章 Transformers
- 12.1 处理文本数据 - Processing text data
- 12.2 点积自注意力 - Dot-product self-attention
- 12.3 将点积自注意力进行扩展 - Extensions to dot-product self-attention
- 12.4 变换器 - Transformers
- 12.5 自然语言处理中的Transformer - Transformers for natural language processing
- 12.6 编码器模型示例:BERT - Encoder model example: BERT
- 12.7 解码器模型示例:GPT3 - Decoder model example: GPT3
- 12.8 编码器-解码器模型示例:机器翻译 - Encoder-decoder model example: machine translation
- 12.9 长序列的变形器 - Transformers for long sequences
- 12.10 图像的Transformer - Transformers for images
- 12.11 总结 - Summary
- 12.12 笔记 - Notes
- 问题
第12章 Transformers
第10章介绍了卷积网络,它专门用于处理在规则网格上的数据。它特别适用于处理图像,图像具有非常多的输入变量,不适合使用全连接网络。卷积网络的每一层都采用参数共享,以便在图像的每个位置上以类似的方式处理局部图像块。
这一章介绍了Transformer。最初,Transformer是用于处理自然语言处理(NLP)问题的,它的网络输入是表示单词或单词片段的高维嵌入序列。语言数据集与图像数据集有一些类似,它们输入变量的规模都可能非常大,而且在每个位置上的统计数据也是相似的,例如,对于同一个单词“Dog”,在文本语料库的每个可能位置都重新学习其含义是不明智的。与图像不同的是,语言数据集的复杂之处在于文本序列的长度不同,而且没有简单的方法来调整它们的大小。
12.1 处理文本数据 - Processing text data
为了说明Transformer的用途,我们可以思考下面的例子:
原文: The restaurant refused to serve me a ham sandwich because it only cooks vegetarian food. In the end, they just gave me two slices of bread. Their ambiance was just as good as the food and service. 译文:这家餐厅拒绝给我提供火腿三明治,因为他们只做素食。最后,他们只给了我两片面包。他们的氛围与食物和服务一样好。
假设我们要设计一个网络,将这段文本处理成适合下游任务的表示形式。例如,用它来判断这个评论是积极的还是消极的(分类问题);或回答一些问题,比如“这家餐厅有没有提供牛排?”
我们立刻可以得出三个观察结论。
- 首先,编码后的输入可能会非常大。在这种情况下,37个词中的每一个都可能会由长度为1024的嵌入向量表示,所以即使对于这段小的文本,编码后的输入长度也会达到
。而在实际使用场景中,一段真实的文本可能有数百甚至数千个词,对于这样的输入规模,如果我们用全连接神经网络去实现,是不切实际的。 - 其次,自然语言处理问题的一个显著特征是每个输入(一个或多个句子)的长度都不同;因此,如何应用全连接网络甚至都不明确。这个观察结果表明,网络应该在不同的输入位置共享单词的参数,类似于卷积网络在不同的图像位置共享参数。
- 第三,语言是模糊的;仅从语法上来看,很难确定代词“it”指的是餐厅还是火腿三明治。为了理解文本,词语“it”应该与词语“restaurant”有某种连接。在Transformer的术语中,前者应该对后者进行注意力计算。这意味着词语之间必须存在连接,并且这些连接的强度将取决于词语本身。此外,这些连接需要跨越大片的文本范围。例如,最后一句中的词语“their”也指的是“restaurant”。
12.2 点积自注意力 - Dot-product self-attention
综上所述,一个用于处理文本的模型应该
- (i)使用参数共享来处理不同长度的输入段落,
- (ii)包含依赖于词语本身的单词表示之间的连接。
Transformer通过利用 点积自注意力 来实现这两个属性。 标准的神经网络层
其中
自注意力块
其中
然后,第n个输出向量
标量权重

图12.1 自注意力作为路由。自注意力机制接受
个输入 (这里 , ),并分别对每个输入进行处理以计算 个值向量。第 个输出 (简写为 )则被计算为 个值向量的加权和,其中权重是正数且总和为一。
- a) 输出
的计算方式为:第一个值向量乘以权重 ,第二个值向量乘以权重 ,第三个值向量乘以权重 。 - b) 输出
的计算方式与上述相同,但权重分别为 0.5、0.2 和 0.3。 - c) 输出
的权重又有所不同。因此,可以将每个输出看作是对 个值的不同路由。
接下来的几节将更详细地讨论点积自注意力。首先,我们介绍值的计算及其后续加权(方程12.3)。然后我们介绍如何计算注意力权重
12.2.1 计算和加权数值 - Computing and weighting values
方程12.2显示,相同的权重
注意力权重

图12.2
个输入 的自注意力,每个输入的维度为 。
- a) 每个输入
都被相同的权重 (相同的颜色表示相同的权重)和偏差 (未显示)独立地作用,形成值 。每个输出是值的线性组合,其中共享的注意力权重 定义了第 个输出对第 个值的贡献。 - b) 显示输入和值之间线性变换
的块稀疏性的矩阵。 - c) 显示值和输出之间注意力权重的稀疏性的矩阵。
12.2.2 计算注意力权重 - Computing attention weights
在前一节中,我们看到输出结果来自两个链式线性变换;对于每个输入
为了计算注意力,我们对输入应用了两个线性变换:
其中
因此,对于每个
"queries"和"keys"这两个名称是从信息检索领域继承而来的,具有以下解释:点积操作返回其输入之间的相似度度量,因此权重

图12.3 计算注意力权重。
这些值通常与输入的大小相同,因此表示不会改变大小。
12.2.3 自注意力总结 - Self-attention summary
第
请注意,这种机制满足了最初的要求。
- 首先,有一个共享的参数集合
。这个参数集合与输入的数量 无关,因此该网络可以适用于不同的序列长度。 - 其次,输入(单词)之间存在连接,这些连接的强度取决于输入本身通过注意力权重来决定。

图12.4 自注意力的矩阵形式。如果我们将
个输入向量 存储在 矩阵 的列中,那么自注意力可以有效地实现。输入 分别与查询矩阵 、键矩阵 和值矩阵 进行操作。然后使用矩阵乘法计算点积,并对结果矩阵的每一列分别应用softmax操作来计算注意力。最后,将值与注意力进行矩阵相乘,以创建与输入相同大小的输出。
12.2.4 矩阵形式 - Matrix form
上述计算可以用一种简洁的形式写成,如果
其中
在这个公式中,函数
12.3 将点积自注意力进行扩展 - Extensions to dot-product self-attention
在上一节中,我们介绍了自注意力。在这里,我们介绍了三种经常在实践中使用的扩展。
12.3.1 位置编码 - Positional encoding
敏锐的读者可能已经注意到,自注意力机制会丢弃了一些重要的信息:即
更准确地说,对于输入排列,它是等变的。然而,当输入对应于句子中的单词时,顺序是重要的。句子“The woman ate the raccoon”的意思与“The raccoon ate the woman”不同。有两种主流的方法可以将位置信息结合起来。
绝对位置编码: 将矩阵

图12.5 位置编码。自注意力架构对输入的排列具有等变性。为了确保不同位置的输入被不同对待,可以在数据矩阵中添加位置编码矩阵
。每一列都是不同的,因此可以区分不同的位置。这里的位置编码使用了预定义的正弦模式(如果需要,可以扩展到更大的 值)。然而,在通常情况下,它们是通过学习得到的。
相对位置编码:自注意机制的输入可以是一个完整的句子,多个句子,或者只是一个句子的片段,而一个词的绝对位置远不及两个输入之间的相对位置重要。当然,如果系统了解两者的绝对位置,这个信息是可以恢复的,但是相对位置编码直接编码了这个信息。注意力矩阵的每个元素对应于查询位置
12.3.2 缩放点积自注意力 - Scaled dot product self-attention
注意力计算中的点积可能具有很大的数值,并将参数移动到softmax函数的区域中,其中最大值完全占主导地位。对softmax函数的输入进行微小的变化现在对输出几乎没有影响(即梯度非常小),使得模型难以训练。为了防止这种情况发生,将点积缩放为查询和键的维度
这被称为缩放点积自注意力。
12.3.3 多头注意力 - Multiple heads
通常会并行应用多个自注意力机制,这被称为多头自注意力。现在计算出
第
其中每个头部都有不同的参数

图 12.6 多头自注意力。自注意力并行地在多个“头部”上进行。每个头部都有自己的查询、键和值。这里描绘了两个头部,分别在青色和橙色框中。输出被垂直拼接,并使用另一个线性变换
进行重新组合。
多头注意力机制似乎是使Transformer良好工作的必要条件。有人猜测它们可以使自注意力网络对糟糕的初始化更加稳健。
12.4 变换器 - Transformers
自注意力只是 变换器(Transformer) 机制的一部分。Transformer 包括一个多头自注意力单元(允许单词表示之间相互交互)和一个全连接网络

图12.7 变换器。输入包含一个
矩阵,其中包含每个 个输入标记的D维单词嵌入。输出是相同大小的矩阵。变换器由一系列操作组成。
- 首先,有一个多头注意力块,允许单词嵌入彼此交互。这形成一个残差块的处理,因此输入被添加回输出。
- 其次,应用了一个LayerNorm操作。
- 第三,有一个第二个残差层,其中相同的全连接神经网络分别应用于每个
个单词表示(列)。 - 最后,再次应用LayerNorm。
其中,列向量
12.5 自然语言处理中的Transformer - Transformers for natural language processing
前一节介绍了Transformer。本节将介绍它在自然语言处理(NLP)任务中的应用。典型的NLP流程从一个tokenizer开始,将文本分割成单词或单词片段。然后,每个token都会映射到一个学习到的嵌入向量。这些嵌入向量会通过一系列的Transformer进行处理。下面,我们逐一介绍这些阶段。
12.5.1 分词 - Tokenization
一个文本处理流程以分词器开始。这将文本从可能的token词汇中分割成较小的组成单元(tokens)。在上述讨论中,我们假设这些tokens就是单词,但是这样的假设会带来一些问题:
- 不可避免地,一些单词(例如姓名)可能不在词汇表中。
- 如何处理标点符号尚不清楚,但这一点很重要。如果一个句子以问号结束,我们必须编码这个信息。
- 词汇表需要不同的标记来表示具有不同后缀的同一个词(例如,walk, walks, walked, walking),而且没有办法明确这些变体之间的关系。
一种方法是使用字母和标点符号作为词汇表,但这意味着将文本分成非常小的部分,并要求后续的网络重新学习它们之间的关系。
实际上,通常会在字母和完整单词之间做出妥协,最终的词汇表包括常见词和由此可以构建出较大且不太常见的词的词片段。词汇表是使用子词分词器,例如字节对编码(图12.8)计算的,它根据子字符串的频率贪婪地合并常见的子串。

图12.8 子词标记化。
- a) 一首童谣的文本片段。最初的标记仅为字符和空白符(用下划线表示),并且它们的频率显示在表中。
- b) 在每次迭代中,子词标记器查找最常出现的相邻字符对(在本例中是se)并将它们合并。这样创建了一个新的标记,并减少了原始标记s和e的计数。
- c) 在第二次迭代中,算法合并了e和空白字符_.请注意,要合并的第一个标记的最后一个字符不能是空白符,这样可以防止跨词合并。
- d) 经过22次迭代后,标记由字母、词片段和常见词组成。
- e) 如果我们无限继续这个过程,标记最终将表示完整的单词。
- f) 随着我们将字母片段添加到字母中,token的数量会随着时间的推移增加,然后再将这些片段合并,数量又会减少。在实际情况中,单词的数量会非常庞大,当词汇量(token的数量)达到预定值时,算法会终止。标点符号和大写字母也会被视为单独的输入字符。
12.5.2 嵌入 - Embeddings
词汇表中的每个标记都被映射到唯一的词嵌入,而整个词汇表的嵌入则存储在一个矩阵

图12.9 输入嵌入矩阵
包含长度为 的 个嵌入,通过将包含整个词汇表嵌入的矩阵 与一个矩阵相乘,该矩阵的列包含对应的词或子词索引的独热向量。词汇表矩阵 被视为模型的参数,并与其他参数一起进行学习。请注意, 中表示"an"的两个嵌入是相同的。
12.5.3 Transformer 模型 - Transformer model
最终,代表文本的嵌入矩阵
- 编码器: 将文本嵌入转换为能够支持各种任务的表示。
- 解码器: 预测下一个标记以继续输入的文本。
- 编码器-解码器: 在 序列到序列 任务中使用,其中一个文本字符串被转换为另一个(例如,机器翻译)。这些变体分别在 12.6-12.8 小节中进行了描述。
12.6 编码器模型示例:BERT - Encoder model example: BERT
BERT是一种编码器模型,使用了一个由30,000个标记组成的词汇表。输入的标记会被转换为1024维的词嵌入,并通过24个Transformer进行处理。每个Transformer包含一个带有16个头的自注意机制。每个头的查询(query),键(key)和值(value)的维度为64(即矩阵
诸如BERT这样的编码器模型利用了迁移学习(第9.3.6节)。在预训练阶段,使用大量文本语料库对变换器架构的参数进行自我监督学习。其目标是让模型学习有关语言统计学的一般信息。在微调阶段,通过较小规模的有监督训练数据对得到的网络进行调整,以解决特定任务。
12.6.1 预训练 - Pre-training
在预训练阶段,网络使用自监督的方法进行训练。这使得可以使用大量的数据,而无需手动标签。对于BERT来说,自监督任务的内容是从一个大型互联网语料库中预测句子中缺失的单词(图12.10)。^[1]^ 在训练过程中,最大的输入长度为512个标记,批次大小为256。系统进行了一百万次步骤的训练,大约相当于3.3亿个单词的语料库执行50个周期。

图12.10 BERT-like编码器的预训练过程。输入的标记(以及表示序列起始的特殊<cls>标记)被转换为词嵌入。在这里,它们被表示为行而不是列,因此标有"word embeddings"的方框是
。这些嵌入通过一系列的Transformers(橙色连接表示这些层中的每个标记都与其他标记进行注意力计算)传递,以创建一组输出嵌入。输入标记中的一小部分会随机替换为通用的<mask>标记。在预训练中,目标是从相关的输出嵌入中预测缺失的词。因此,输出嵌入通过softmax函数,并使用多类别分类损失(第5.24节)进行处理。这个任务的优点是它利用了左右上下文来预测缺失的词,但缺点是它对数据的利用效率不高;在这里,需要处理七个标记才能将两个项添加到损失函数中。
预测缺失的单词能够迫使Transformer网络理解一些语法规则。例如,它可能会学习到形容词"red"经常出现在诸如"house"或"car"之类的名词前面,但从不出现在"shout"这样的动词前面。它还可以让模型学习到一些关于世界的表面"常识"。例如,在训练之后,模型会认为在句子"The <mask> pulled into the station"中,缺失的单词更有可能是"train",而不是"peanut"。然而,这种类型的模型所能达到的"理解"程度是有限的。
^[1]^ BERT还使用了一个次要任务,即预测两个句子在文本中是否相邻,但这只能稍微提高性能。
12.6.2 微调 - Fine-tuning
在微调阶段,模型参数被调整以使网络专注于特定的任务。在Transformer网络后附加了一个额外的层,将输出向量转换为所需的输出格式。示例包括:
文本分类: 在BERT中,有一个特殊的标记称为分类或<cls>标记,在预训练期间放置在每个字符串的开头。对于类似于情感分析(将文本标记为具有积极或消极情感色彩)的文本分类任务,与<cls>标记相关的向量被映射到一个数字,并通过逻辑sigmoid函数传递(图12.11a)。这有助于生成一个标准的二元交叉熵损失(第5.4节)。
词语分类: 命名实体识别 的目标是将每个单词分类为实体类型(例如,人名、地名、组织名或非实体)。为此,将每个输入嵌入

图12.11 在预训练之后,使用手动标注的数据对编码器进行微调以解决特定任务。通常,会将线性变换或多层感知机(MLP)附加到编码器上,以生成所需的任何输出。
- a) 示例文本分类任务。在这个情感分类任务中,使用<cls>标记的嵌入来预测评论是积极的概率。
- b) 示例词分类任务。在这个命名实体识别问题中,使用每个词的嵌入来预测该词是否对应人名、地名、组织名或者不是一个实体。
文本跨度预测: 在SQuAD 1.1的问答任务中,将问题和包含答案的维基百科段落进行拼接和分词处理。然后使用BERT来预测包含答案的段落中的文本跨度。每个标记对应两个数字,表示该位置是文本跨度的起始和结束位置的概率。得到的两组数字通过两个softmax函数进行处理。可以通过结合适当位置的起始和结束概率来推导任何文本跨度成为答案的可能性。
12.7 解码器模型示例:GPT3 - Decoder model example: GPT3
本节介绍一个解码器模型示例:GPT3。基本架构与编码器模型非常相似,由一系列在学习的词嵌入上运行的变换器组成。然而,目标不同。编码器的目标是构建一个可以进行微调以解决各种更具体的自然语言处理任务的文本表示。相反,解码器只有一个目的:生成序列中的下一个标记。通过将扩展的序列反馈到模型中,它可以生成连贯的文本段落。
12.7.1 语言模型 - Language modeling
GPT3构建了一个自回归的语言模型。通过一个具体的例子来理解这个模型是最容易的。考虑这个句子:It takes great courage to let yourself appear weak(让自己显得软弱需要很大勇气)。为简单起见,假设每个单词都是一个token。整个句子的概率可以表示为:
更正式地说,自回归模型将观察到的
12.7.2 掩码自注意力 - Masked self-attention
为了训练一个解码器,我们最大化自回归模型下输入文本的对数概率。理想情况下,我们会一次性传入整个句子,并同时计算所有的对数概率和梯度。然而,这会导致一个问题;如果我们传入整个句子,计算
幸运的是,在Transformer网络中,令牌只在自注意力层中相互作用。因此,可以通过确保对答案和正确上下文的关注为零来解决这个问题。这可以通过在自注意力计算(方程12.5)中将相应的点积设为负无穷大,然后再通过
整个解码器网络的操作如下。输入的文本被分词,然后将这些标记转换为嵌入向量。这些嵌入向量被传入Transformer网络,但现在Transformer使用了掩码自注意力机制,这样它们只能关注当前和之前的标记。可以将每个输出的嵌入向量看作表示了一个部分句子,并且对于每个部分句子,目标是预测序列中的下一个标记。因此,在Transformer之后,线性层将每个单词嵌入映射到词汇表的大小,接着使用softmax函数将这些值转换为概率。在训练过程中,我们的目标是使用标准的多类交叉熵损失函数(图12.12)最大化每个位置上下一个标记在真实序列中的对数概率之和。
12.7.3 从解码器生成文本 - Generating text from a decoder
自回归语言模型是本书中讨论的第一个生成模型的例子。由于它定义了一个文本序列上的概率模型,它可以用来生成新的可能的文本示例。为了从模型中生成文本,我们从一个输入文本序列开始(可以只是一个特殊的<start>标记,表示序列的开始),将其输入网络,然后网络输出可能的后续标记的概率。然后,我们可以选择最可能的标记,或者从这个概率分布中进行抽样。新的扩展序列可以再次被输入解码器网络,输出下一个标记的概率分布。通过重复这个过程,我们可以生成大量的文本。由于掩码自注意力机制,计算可以变得非常高效,因为之前的嵌入向量不依赖于后续的嵌入向量。因此,在生成后续标记时,可以重复使用之前的计算。
在实践中,有许多策略可以使输出的文本更连贯。例如,束搜索(beam search)会跟踪多个可能的句子完成方式,以找到最有可能的整体结果(这不一定是通过贪婪地选择每一步中最有可能的下一个词来实现的)。Top-k采样(top-k sampling)从只有前K个最有可能的选项中随机选择下一个词,以防止系统意外地从低概率的尾部标记中选择,从而导致不必要的语言死胡同。

图12.12 GPT3型解码器网络的训练过程。将标记映射为带有特殊<start>标记的单词嵌入,嵌入通过一系列使用了掩码自注意力的转换器进行处理。在这里,句子中的每个位置只能关注自己的嵌入以及序列中先前的标记的嵌入(橙色连接)。每个位置的目标是最大化序列中下一个真实标记的概率。换句话说,在位置一,我们希望最大化标记It的概率;在位置二,我们希望最大化标记takes的概率,依此类推。掩码自注意力确保系统不能通过查看后续输入来作弊。自回归任务的优势在于它能有效利用数据,因为每个单词都为损失函数贡献了一个项。然而,它只利用了每个单词的左侧上下文。
12.7.4 GPT3和少样本学习 - GPT3 and few-shot learning
GPT3这样的大型语言模型以大规模的方式应用了这些思想。在GPT3中,序列长度为2048个词元,总批次大小为320万个词元。有96个Transformer(其中一些实现了稀疏版本的注意力),每个处理大小为12288的词嵌入。自注意力层中有96个头,值、查询和键的维度为128。它经过了3000亿个词元的训练,并包含了1750亿个参数。
以下是 GPT3 模型填充文本的示例,其中橙色部分是输入给模型的文本,而青色部分是模型生成的文本:

这种文本扩展是合理的,尽管只有部分准确。
这种规模的学习模型有一个令人惊讶的特点,即它们可以在没有进行微调的情况下执行许多任务。如果我们提供了几个正确的问题/答案对的例子,然后再提出另一个问题,它们通常可以通过完成序列来正确回答最后一个问题。一个例子就是纠正英语语法:

在这里,包含橙色示例的文本被提供作为GPT3的上下文,然后系统生成了青色的正确答案。这种现象适用于许多情况,包括根据自然语言描述生成代码片段,进行算术运算,翻译语言之间的文字和回答关于文本段落的问题。因此,可以说庞大的语言模型是少样本学习者;它们可以仅仅依靠少数示例来学习新的任务。然而,实际中的性能不稳定,并且它究竟是在从学习的示例中外推还是仅仅进行内插或逐字复制,尚不清楚。
12.8 编码器-解码器模型示例:机器翻译 - Encoder-decoder model example: machine translation
语言之间的翻译是一个序列到序列任务的例子。这需要一个编码器(用于计算源句子的表示)和一个解码器(用于生成目标语言的句子)。可以使用一个编码器-解码器模型来解决这个任务。
考虑将英语翻译成法语。编码器接收英语句子,并通过一系列的 Transformer 处理,为每个标记创建一个输出表示。在训练过程中,解码器接收法语的真实翻译,并通过一系列的 Transformer 进行处理,使用掩码自注意力机制,在每个位置预测下一个词。然而,解码器层还会关注编码器的输出。因此,每个法语输出词都受到前面的输出词和源英语句子的影响(图 12.13 )。

图12.13 编码器-解码器架构。通过将两个句子传递给系统,目标是将第一个句子翻译成第二个句子。
- a) 第一个句子通过标准编码器传递。
- b) 第二个句子通过解码器传递,解码器使用掩码的自注意力,并且还使用交叉注意力(橙色矩形)关注编码器的输出嵌入。损失函数与解码器模型相同;我们希望最大化输出序列中下一个单词的概率。
这是通过修改解码器中的Transformer来实现的。解码器中的原始Transformer(图12.12)由一个掩码的自注意力层和一个分别应用于每个嵌入的神经网络组成。在这两个组件之间添加了一个新的自注意力层,其中解码器嵌入注意到编码器嵌入。这使用了一种称为编码器-解码器注意力或交叉注意力的自注意力的版本,其中查询是根据解码器嵌入计算的,而键和值是根据编码器嵌入计算的(图12.14)。

图12.14 交叉注意力。计算流程与标准的自注意力相同。然而,查询是根据解码器的嵌入
计算的,而键和值是根据编码器的嵌入 计算的。在翻译的上下文中,编码器包含有关源语言的信息,而解码器包含有关目标语言统计信息的信息。
12.9 长序列的变形器 - Transformers for long sequences
由于编码器模型中的每个令牌都与其他令牌进行交互,所以计算复杂度与序列长度呈二次关系。对于解码器模型,每个令牌只与前面的令牌进行交互,所以交互次数大约只有一半,但计算复杂度仍然呈二次关系。这些关系可以通过交互矩阵进行可视化表示(图12.15a-b)。
这种计算量的二次增长最终限制了能够处理的序列长度。已经开发了许多方法来扩展Transformer以处理更长的序列。一种方法是修剪自注意力的交互,或者等效地稀疏化交互矩阵(图12.15c-h)。例如,可以将其限制为卷积结构,使得每个标记只与相邻的几个标记进行交互。在多个层次上,随着感受野的扩展,标记仍然在较大的距离上进行交互。与图像中的卷积一样,核的大小和膨胀率可以变化。

图12.15 自注意力中的交互矩阵。
- a) 在编码器中,每个标记都与其他每个标记进行交互,计算量随着标记数的增加而二次扩展。
- b) 在解码器中,每个标记只与前面的标记进行交互,但复杂度仍然是二次的。
- c) 通过使用卷积结构(编码器情况)可以减少复杂性。
- d) 用于解码器情况的卷积结构。
- e-f) 带有膨胀率为2和3的卷积结构(解码器情况)。
- g) 另一种策略是允许选定的标记与所有其他标记(编码器情况)或所有先前标记(所示的解码器情况)进行交互。
- h) 或者,可以引入全局标记(左两列和上两行)。这些标记与所有标记以及彼此进行交互。
一个纯卷积的方法需要很多层来整合远距离的信息。加速这个过程的一种方法是允许选择性的token(可能是每个句子的开头)参与到所有其他的token中(编码器模型),或者是所有先前的token中(解码器模型)。类似的想法是拥有一小部分全局token,它们连接到所有其他的token和它们自身。像<cls> token一样,这些token并不代表任何单词,而是用来提供远距离的连接。
12.10 图像的Transformer - Transformers for images
Transformer最初是为文本数据开发的。它在文本领域的巨大成功引发了大家对使用它处理图像任务的实验。这显然不是一个有希望的想法,原因有两个。
- 首先,图像中的像素比句子中的单词多得多,所以自注意力的二次复杂度构成了一个实际的瓶颈。
- 其次,卷积网络具有很好的归纳偏差,因为每一层都对空间平移具有等变性,并且它们考虑了图像的二维结构。然而,在Transformer网络中,这必须被学习。
尽管存在这些明显的缺点,Transformer网络在图像分类和其他任务上的性能现在已经超过了卷积网络。部分原因是Transformer可构建巨大的规模,并且可以用大量数据来预训练网络。本节描述了图像的Transformer模型。
12.10.1 ImageGPT - ImageGPT
ImageGPT是一个Transformer解码器;它构建了一个自回归模型,用于处理部分图像并预测接下来的像素值。Transformer网络的二次复杂度意味着最大的模型(包含68亿个参数)仍然只能处理64×64像素的图像。此外,为了使其可行,原始的24位RGB色彩空间必须被量化为9位色彩空间,因此系统在每个位置上输入(和预测)512个可能的标记之一。
图像本质上是2D对象,但是ImageGPT只是在每个像素处学习不同的位置编码。因此,它必须学习到每个像素与其前面的相邻像素以及上面行中的附近像素之间的密切关系。图12.16展示了一些生成结果的示例。

图12.16 ImageGPT。
- a) 从自回归的ImageGPT模型生成的图像。左上角的像素绘制自该位置的经验分布估计。接下来的像素依次生成,以前面的像素为条件,按行工作直到图像的右下角。对于每个像素,变换器解码器生成如方程12.15中的条件分布,并绘制一个样本。然后将扩展序列反馈到网络中生成下一个像素,依此类推。
- b) 图像补全。在每种情况下,图像的下半部分被删除(顶行),然后ImageGPT逐像素地完成剩余部分(显示了三种不同的补全结果)。改编自https://openai.com/blog/image-gpt/。 对于ImageNet基准测试,该系统达到了11.45%的Top-1错误率。然而,它的表现并不如最好的当代卷积网络,而这些网络在没有监督预训练的情况下表现更好。卷积网络的强烈归纳偏差只能通过使用大量的训练数据来超越。
这个解码器的内部表示被用作图像分类的基础。最终的像素嵌入被平均化,然后经过一个线性层映射到激活值,再通过一个softmax层预测类别概率。该系统在大量的网络图像上进行预训练,然后在ImageNet数据库上进行微调,将图像大小调整为48x48像素,使用一个包含交叉熵项用于图像分类和生成损失项用于预测像素的损失函数。尽管使用了大量的外部训练数据,该系统在ImageNet上仅达到了27.4%的Top-1错误率(图10.15)。与当时的卷积架构相比,这个错误率较低(参见图10.21),但考虑到输入图像尺寸较小,仍然令人印象深刻;毫不意外,它在目标物体较小或较细的图像分类中无法正常工作。
12.10.2 视觉变压器(ViT) - Vision Transformer (ViT)
视觉变压器通过将图像分成16×16的块来解决图像分辨率的问题(图12.17)。每个块通过学习得到的线性变换映射到较低维度,并将这些表示输入到变压器网络中。同样,我们也会学习标准的一维位置编码。

图12.17 视觉Transformer。视觉Transformer(ViT)将图像划分为一个网格的补丁(原始实现中为16×16)。每个补丁通过学习得到的线性变换进行投影,成为一个补丁嵌入。这些补丁嵌入被输入到Transformer编码器网络中,并使用<cls>令牌来预测类别概率。
这是一个带有<cls>标记的编码器模型(参见图12.10-12.11)。然而,与BERT不同的是,它使用监督式预训练,使用了一个包含303亿个标记图像的大型数据库,这些图像来自于18000个类别。通过最后的网络层将<cls>标记映射到激活值,然后通过softmax函数生成类别概率。在预训练后,系统将用于最终的分类任务,通过将最后一层替换为映射到所需类别数量的层,并进行微调。
12.10.3 多尺度视觉变换器 - Multi-scale vision transformers
Vision Transformer与卷积架构的不同之处在于它仅在单一尺度上运行。已经提出了几种处理多尺度图像的变换器模型。与卷积网络类似,这些模型通常从高分辨率的图块和少量通道开始,并逐渐降低分辨率,同时增加通道的数量。

图12.18 移位窗口(SWin)Transformer(Liu等,2021c)。
- a) 原始图像。
- b) SWin Transformer将图像划分为一个窗口网格,然后将每个窗口划分为一个子网格的补丁。Transformer网络对每个窗口内的补丁进行独立的自注意力计算。
- c) 每个交替层会移动窗口,以改变与之交互的补丁子集,从而使信息能够在整个图像中传播。
- d) 在几个层之后,将2×2的块状表示拼接在一起,以增加有效的块(和窗口)大小。
- e) 交替层在这个新的较低分辨率上使用了平移的窗口。
- f) 最终,分辨率足够高,只有一个窗口,并且补丁跨越整个图像。
多尺度变压器的一个典型示例是平移窗口或SWin变压器。这是一个编码器变压器,将图像划分为补丁,并将这些补丁分组为一个窗口的网格,在其中独立应用自注意力(图12.18)。这些窗口在相邻的变压器中进行平移,因此给定补丁的有效感受野可以扩展到窗口边界之外。
这种架构周期性地通过连接非重叠的2×2补丁的特征,并应用线性变换将这些连接的特征映射到原始通道数量的两倍来降低尺度。这种架构没有<cls>标记,而是对最后一层的输出特征进行平均。然后,通过线性层将这些特征映射到所需的类别数量,并通过softmax函数输出类别概率。截至目前,这种架构的最先进版本在ImageNet数据库上实现了9.89%的top-1错误率。
一个相关的想法是定期地整合整个图像中的信息。双重关注视觉Transformer(DaViT)交替使用两种类型的Transformer。在第一个类型中,图像的片段相互关注,自注意力计算使用所有通道。在第二个类型中,通道相互关注,自注意力计算使用所有图像片段。该架构在ImageNet上达到了9.60%的top-1错误率,并且接近于写作时的最新技术水平。
12.11 总结 - Summary
本章介绍了自注意力机制和Transformer架构。接着介绍了编码器、解码器和编码器-解码器模型。Transformer在高维嵌入的集合上进行操作。每一层的计算复杂度较低,可以使用矩阵形式并行计算。由于每个输入嵌入与其他所有嵌入都有交互作用,它可以描述文本中的长距离依赖关系。最终,计算复杂度随着序列长度的增加呈二次增长;降低复杂度的一种方法是稀疏化交互矩阵。
本书中,使用大规模无标签数据集对Transformers进行训练是无监督学习(无需标签的学习)的第一个示例。编码器通过预测缺失的标记来学习可以用于其他任务的表示。解码器在输入上构建自回归模型,并且是本书中生成模型的第一个示例。生成解码器可以用于创建新的数据示例。
第13章考虑了用于处理图数据的网络。与Transformers相关的是,在每个网络层中,图的节点相互关注。第14-18章回到了无监督学习和生成模型的主题。
12.12 笔记 - Notes
自然语言处理: Transformers 是为自然语言处理(NLP)任务而开发的。这是一个涉及文本分析、分类、生成和操作的庞大领域。例子包括词性标注、翻译、文本分类、实体识别(人、地点、公司等)、文本摘要、问答、词义消歧和文档聚类。NLP 最初采用基于规则的方法,利用语法的结构和统计学的知识。关于早期方法,可以参考 Manning & Schutze , 1999 和 Jurafsky & Martin , 2000。
循环神经网络: 在引入Transformer之前,许多最先进的自然语言处理(NLP)应用使用循环神经网络(RNN)(图12.19)。"循环"一词是由Rumelhart et al.,1985引入的,但主要思想可以追溯到至少Minsky&Papert,1969。RNN一次处理一个输入序列(NLP中的单词)。在每个步骤中,网络同时接收新的输入和从上一个时间步骤计算得到的隐藏表示(循环连接)。最终输出包含有关整个输入的信息。该表示可以支持NLP任务,如分类或翻译。它们还可用于解码环境中,其中生成的标记被反馈到模型中形成序列的下一个输入。例如,PixelRNN(Van den Oord et al.,2016c)使用RNN构建了一个图像的自回归模型。

图12.19 循环神经网络(RNN)。单词嵌入按顺序通过一系列相同的神经网络。每个网络有两个输出;一个是输出嵌入,另一个(橙色箭头)反馈到下一个神经网络中,同时与下一个单词嵌入一起。每个输出嵌入包含有关单词本身以及在前面的短语中的上下文的信息。原则上,最终的输出包含整个句子的信息,并可以用于支持分类任务,类似于变压器编码器模型中的<cls>标记。然而,RNN有时会逐渐地"忘记"更早的时间步的标记。
从循环神经网络到Transformer: RNN的一个问题是它们可能会忘记更远处的信息。这种架构的更复杂版本,如长短期记忆网络或LSTM(Hochreiter & Schmidhuber, 1997b)和门控循环单元或GRU(Cho等,2014;Chung等,2014),部分解决了这个问题。然而,在机器翻译中,出现了这样的想法,即可以利用RNN中的所有中间表示来生成输出句子。此外,根据它们之间的关系,某些输出词应该更多地“关注”特定的输入词(Bahdanau等,2015)。这最终导致放弃循环结构,并用编码器-解码器Transformer进行替换(Vaswani等,2017)。在这里,输入标记相互关注(自注意力),输出标记关注先前的序列(掩码自注意力),同时输出标记也关注输入标记(交叉注意力)。有关Transformer的正式算法描述可以在Phuong & Hutter(2022)中找到,并且有关工作的调查可以在Lin等(2022)中找到。需要谨慎对待文献,因为许多对Transformer的改进在经过仔细评估的受控实验中并没有产生有意义的性能提升(Narang等,2021)。
应用场景: 基于自注意力和Transformer架构的模型已经应用于文本序列(Vaswani et al.,2017),图像补丁(Dosovitskiy et al.,2021),蛋白质序列(Rives et al.,2021),图形(Veličković et al.,2019),数据库模式(Xu et al., 2021b),语音(Wang et al., 2020c),数学积分(当被建模为一个翻译问题时)(Lample & Charton,2020)以及时间序列(Wu et al., 2020b)。然而,它们最著名的成功是在构建语言模型方面,最近还作为卷积网络在计算机视觉中的替代品。
大型语言模型: Vaswani等,2017针对翻译任务进行了目标设定,但如今的Transformers更常用于构建纯编码器或纯解码器模型,其中最著名的是BERT(Devlin等,2019)和GPT2/GPT3(Radford等,2019; Brown等,2020)。这些模型通常通过GLUE(Wang等,2019b)等基准进行测试,其中包括在第12.6.2节中介绍的SQuAD问题回答任务(Rajpurkar等,2016),SuperGLUE(Wang等,2019a)和BIG-bench(Srivastava等,2022),它们将许多自然语言处理任务组合在一起,用于衡量语言能力的综合得分。解码器模型通常不针对这些任务进行微调,但当给出一些问题和答案的示例,并要求完成下一个问题的文本时,它们仍然可以表现出良好的性能。这被称为少样本学习( Brown等,2020 )。
自GPT3以来,许多解码语言模型已经发布,并在few-shot结果方面稳步改进。这些模型包括GLaM(Du et al.,2022),Gopher(Rae et al.,2021),Chinchilla(Hoffmann et al.,2023),Megatron-Turing NLG(Smith et al.,2022)和LaMDa(Thoppilanet al.,2022)。绝大部分性能提升可以归因于模型规模的增加、稀疏激活模块的使用以及对更大数据集的利用。撰写本文时,最新的模型是PaLM(Chowdhery et al.,2022),它拥有5400亿个参数,并在6144个处理器上训练了7800亿个标记。有趣的是,由于文本高度可压缩,这个模型有足够的容量来记住整个训练数据集。对于许多语言模型来说,这都是事实。对于大型语言模型超越人类表现的观点已经提出了许多大胆的陈述。对于某些任务来说,这可能是真实的,但是对于这样的陈述应该持谨慎态度(参见Ribeiro et al.,2021;McCoy et al.,2019;Bowman & Dahl,2021;和Dehghani et al.,2021)。
这些模型具备相当丰富的世界知识。例如,在12.7.4节中,模型了解深度学习的关键事实,包括它是一种具有相关算法和应用的机器学习类型。实际上,有一个这样的模型被错误地认为是有感知能力的(Clark, 2022)。然而,有令人信服的论点认为,这类模型所能拥有的“理解”程度是有限的(Bender & Koller, 2020)。
分词器: Schuster和Nakajima(2012)和Sennrich等人(2015)分别引入了WordPiece和字节对编码(BPE)两种方法。这两种方法都是根据标记的邻接频率贪婪地合并标记对(图12.8),其主要区别在于初始标记的选择方式。例如,在BPE中,初始标记是字符或标点符号,其中特殊标记用于表示空白字符。合并操作不能跨越空白字符。随着算法的进行,通过递归组合字符来形成新的标记,从而生成子词和词标记。单元语言模型(Kudo,2018)生成多个可能的候选合并,并根据语言模型中的概率选择最佳合并。Provilkov等人(2020)开发了BPE dropout,通过在频率计数过程中引入随机性,更高效地生成候选合并。字节对编码和单元语言模型的不同版本都包含在SentencePiece库中(Kudo和Richardson,2018),该库直接处理Unicode字符,可以处理任何语言。He等人(2020)引入了一种将子词分割视为潜变量并在学习和推断中对其进行边际化的方法。
解码算法: Transformer解码器模型接收一段文本并返回下一个标记的概率。然后将其添加到前面的文本中,再次运行模型。从这些概率分布中选择标记的过程被称为解码。一种朴素的解码方法是要么(i)贪婪地选择最有可能的标记,要么(ii)根据分布随机选择一个标记。然而,这两种方法在实践中并不有效。在前一种情况下,结果可能会非常普通,而在后一种情况下,可能会导致质量下降的输出(Holtzman et al.,2020)。这部分是因为在训练过程中,模型只接触到了真实标记序列(称为教师强制),但在部署时却看到了自己的输出。
注意力机制的类型: 缩放点积注意力(Vaswani et al.,2017)只是一系列注意力机制中的一种,其他注意力机制包括加性注意力(Bahdanau et al.,2015),乘法注意力(Luong et al.,2015),键-值注意力(Daniluk et al.,2017)和内存压缩注意力(Liu et al.,2019c)。Zhai et al.,2021构建了“无注意力”Transformer,其中的标记以一种不具有二次复杂度的方式进行交互。多头注意力也是由Vaswani et al.,2017引入的。有趣的是,经过训练后,大多数头部可以被剪枝而不会对性能产生关键影响(Voita et al.,2019); 有人认为它们的作用是防止糟糕的初始化。Hu et al.,2018b提出了挤压激励网络,这是一种类似于注意力的机制,它基于全局计算的特征对卷积层中的通道进行重新加权。
自注意力与其他模型的关系: 自注意力计算与其他模型有密切的联系。首先,它是超网络的一个示例(Ha等人,2017年),因为它使用网络的一部分来选择另一部分的权重:注意力矩阵形成了稀疏网络层的权重,将值映射到输出(图12.3)。*合成器(Tay等人,2021年)简化了这个想法,只需使用神经网络从相应的输入中创建注意力矩阵的每一行。尽管输入的标记不再相互作用以创建注意力权重,但这仍然效果出奇的好。Wu等人(2019年)提出了一个类似的系统,它使用卷积结构生成注意力矩阵,使标记关注其邻居。门控多层感知器(Wu等人,2019年)计算一个矩阵,通过逐点乘法对值进行修改,而不进行混合。Transformer模型与快速权重记忆系统也有密切的关联,这些系统是超网络的前身(Schlag等人,2021年)。
自注意力也可以被看作是一种路由机制(图12.1),从这个角度来看,与胶囊网络(Sabour et al.,2017)存在关联。胶囊网络捕捉图像中的层次关系;较低层的网络可能检测到面部部位(鼻子、嘴巴),然后在表示面部的较高层级胶囊中进行组合(路由)。然而,胶囊网络使用的是协商路由。在自注意力中,输入之间竞争着对给定输出的贡献程度(通过softmax操作)。在胶囊网络中,层的输出之间竞争着获取来自较早层的输入。一旦我们将自注意力视为一个路由网络,我们就可以质疑是否有必要使这种路由变得动态化(即依赖于数据)。随机合成器(Tay et al.,2021)完全消除了注意力矩阵对输入的依赖,而是使用预定的随机值或学习的值。这在各种任务中表现出了惊人的效果。
多头自注意力也与图神经网络(参见第13章)、卷积(Cordonnier等人,2020年)、循环神经网络(Choromanski等人,2020年)以及霍普菲尔德网络中的记忆检索(Ramsauer等人,2021年)密切相关。有关Transformer模型与其他模型之间关系的更多信息,请参阅Prince(2021a)。
位置编码: 原始的Transformer论文(Vaswani et al.,2017)尝试了预定义位置编码矩阵
许多后续的工作对注意力矩阵进行了修改,使得在缩放点积自注意力方程中,只有查询和键包含位置信息:
其中,
这导致了一种通过展开方程12.16中分子中的二次项并保留其中的一部分项的思想。例如,Ke等人(2021)通过保留仅包含内容-内容和位置-位置项,并为每个项使用不同的投影矩阵
另一种修改是直接注入有关相对位置的信息。相对位置比绝对位置更重要,因为一批文本可以从文档的任意位置开始。Shaw et al. , 2018、Raffel et al. , 2020和Huang et al. , 2020b都开发了系统,其中为每个相对位置偏移学习了单个项,使用这些相对位置编码以各种方式修改了注意力矩阵。Wei et al. , 2019研究了基于预定义正弦嵌入而非学习值的相对位置编码。DeBERTa(He et al. , 2021)结合了这些思想;他们仅保留二次展开的子集,并对其应用不同的投影矩阵,并使用相对位置编码。其他研究还探索了在更复杂方式中编码绝对和相对位置信息的正弦嵌入(Su et al. , 2021)。
[Wang et al., 2020a]对BERT中Transformers的性能进行了比较,使用了不同的位置编码方法。他们发现相对位置编码比绝对位置编码效果更好,但使用正弦函数和学习到的嵌入之间几乎没有什么区别。有关位置编码的调查可以在[Dufter et al., 2021]中找到。
扩展Transformers以处理更长的序列: 自注意机制的复杂性随着序列长度的增加呈二次增加。一些任务,如摘要或问答,可能需要较长的输入,因此这种二次依赖性限制了性能。有三个方向的工作试图解决这个问题。第一个是减小注意力矩阵的大小,第二个是使注意力稀疏,第三个是修改注意力机制以提高效率。
为了减小注意力矩阵的大小,Liu等人(2018b)引入了内存压缩注意力。这种方法对键和值应用步进卷积,以类似于卷积网络中的下采样方式减少了位置的数量。现在,注意力是在相邻位置的加权组合之间应用的,其中权重是可学习的。沿着类似的思路,Wang等人(2020b)观察到实践中注意机制中的量通常具有低秩,并开发了LinFormer,在计算注意力矩阵之前将键和值投影到一个较小的子空间上。
为了使注意力稀疏,Liu et al.,2018b 提出了本地注意力,其中相邻的标记块只相互关注。这创建了一个块对角交互矩阵(见图12.15)。信息无法从一个块传递到另一个块,因此这些层通常与全局注意力交替使用。沿着同样的思路,GPT3(Brown et al.,2020)使用卷积交互矩阵,并将其与全局注意力交替使用。Child et al.,2019 和Beltagy et al.,2020 尝试了各种交互矩阵,包括具有不同膨胀率的卷积结构,但允许一些查询与每个关键字进行交互。Ainslie et al.,2020 引入了扩展Transformer结构(图12.15h),它使用一组全局嵌入与每个其他标记进行交互。这只能在编码器版本中完成,或者这些隐含地允许系统“向前看”。与相对位置编码相结合,这个方案需要特殊的编码来映射到、从全局嵌入之间的转换。BigBird(Ainslie et al.,2020)将全局嵌入和卷积结构与可能连接的随机采样相结合。其他工作研究了注意力矩阵的稀疏模式学习(Roy et al.,2021; Kitaev et al.,2020; Tay et al.,2020)。
最后,需要注意的是用于计算注意力的softmax操作的分子和分母中的项具有形式exp
训练Transformers: 训练Transformers是具有挑战性的,需要学习率预热(Goyal等人,2018)和Adam(Kingma和Ba,2015)。事实上,Xiong等人(2020a)和Huang等人(2020a)表明,梯度消失,而Adam更新在没有学习率预热的情况下减小幅度。有几个相互作用的因素导致了这个问题。残差连接导致梯度爆炸(图11.6),但规范化层防止了这种情况。Vaswani等人(2017)使用了LayerNorm而不是BatchNorm,因为自然语言处理的统计数据在批次之间变化很大,尽管后续的工作对Transformers进行了修改(Shen等人,2020a)。将LayerNorm放在残差块的外部会导致梯度在通过网络时缩小(Xiong等人,2020a)。此外,残差连接和主要的自注意机制在初始化时的相对权重随着网络的移动而变化(参见图11.6c)。还有一个复杂化的因素是查询和键参数的梯度比值参数更小(Liu等人,2020),这需要使用Adam。这些因素以复杂的方式相互作用,使训练不稳定,并需要学习率预热。
有各种尝试来稳定训练,包括(i)一种名为TFixup的FixUp变种,允许移除LayerNorm组件(Huang等,2020a);(ii)改变网络中LayerNorm组件的位置(Liu等,2020);以及(iii)重新加权残差分支中的两个路径(Liu等,2020;Bachlechner等,2021)。Xu等,2021b引入了一种名为DTFixup的初始化方案,可使Transformer在较小的数据集上进行训练。详细讨论可参见Prince,2021b。
视觉应用: ImageGPT(Chen等,2020a)和Vision Transformer(Doso-vitskiy等,2021)都是早期应用于图像的Transformer架构。Transformer已经被用于图像分类(Dosovitskiy等,2021;Touvron等,2021)、目标检测(Carion等,2020;Zhu等,2020b;Fang等,2021)、语义分割(Ye等,2019;Xie等,2021;Gu等,2022)、超分辨率(Yang等,2020a)、动作识别(Sun等,2019;Girdhar等,2019)、图像生成([Chen等,2021b()];Nash等,2021)、视觉问答(Su et al.,2019b;Tan和Bansal,2019)、修复(Wan等,2021;Zheng等,2021;Zhao等,2020b;Li等,2022)、上色(Kumar等,2021)等许多其他视觉任务(Khan等,2022;Liu等,2023b)。
Transformer和卷积网络: Transformer已经与卷积神经网络结合应用于许多任务,包括图像分类(Wu et al.,2020a)、目标检测(Hu et al.,2018a; Carion et al. , 2020)、视频处理(Wang et al.,2018c; Sun et al.,2019)、无监督目标发现(Locatello et al.,2020)和各种文本/视觉任务(Chen et al.,2020d; Lu et al.,2019; Li et al.,2019)。Transformer在视觉任务上可以超过卷积网络,但通常需要大量的数据才能实现优越的性能。通常情况下,它们会在大型数据集(如JRT Sun et al.,2017和LAION Schuhmann et al.,2021)上进行预训练。Transformer没有卷积网络的归纳偏差,但通过使用大量的数据,它可以克服这个缺点。
从像素到视频: 非局部网络(Wang et al.,2018c)是对图像数据应用自注意力的早期应用。Transformer最初被应用于局部邻域的像素(Parmar et al.,2018; Hu et al.,2019; Parmar et al.,2019; Zhao et al.,2020a)。ImageGPT(Chen et al.,2020a)将其扩展到了对小图像中的所有像素进行建模。Vision Transformer(ViT)(Dosovitskiy et al.,2021)使用非重叠的补丁来分析更大的图像。
从那时起,许多多尺度系统被开发出来,包括SWin Transformer(Liu et al.,2021c)、SWinV2(Liu et al.,2022)、多尺度Transformer(MViT)(Fan et al.,2021)和金字塔视觉Transformer(Wang et al.,2021)。Crossformer(Wang et al.,2022b)模型用于表示不同空间尺度之间的相互作用。Ali et al.,2021引入了交叉协方差图像Transformer,其中通道而不是空间位置相互关注,从而使注意力矩阵的大小与图像大小无关。双重注意力视觉Transformer(DaViT)由Ding et al.,2022开发,它在子窗口内部进行局部空间注意力和在通道之间进行全局空间注意力之间交替。Chu et al.,2021同样通过对空间域进行子采样,在子窗口内部进行局部注意力和全局注意力之间交替。Dong et al.,2022将图12.15中的元素之间的相互作用稀疏化应用于2D图像域。
Transformers随后被用于视频处理( Arnab等,2021; Bertasius等,2021; Liu等,2021c; Neimark等,2021; Patrick等,2021 )。有关应用于视频的Transformer的调查可以在Selva等,2022中找到。
将图像和文本相结合: CLIP(Radford等,2021)使用对比式预训练任务学习了图像和其标题的联合编码器。该系统接受
问题
问题12.1 考虑一个自注意机制,它处理
问题12.2 为什么我们希望确保自注意机制的输入与输出大小相同?
问题12.3 证明自注意机制(方程12.8)对于数据
问题12.4 考虑softmax运算:
在输入值为
问题12.5 为什么在每个
问题12.6 BERT是通过两个任务进行预训练的。第一个任务要求系统预测缺失(掩码)的单词。第二个任务要求系统对原始文本中的句子对进行分类,判断它们是否相邻。请确定每个任务是生成性任务还是对比性任务(参见第9.3.6节) 。为什么你认为他们使用了两个任务?提出两个新的对比性任务,可用于预训练语言模型。
问题 12.7 考虑向预计算的掩码自注意机制中添加一个新的标记,该机制含有
问题 12.8 视觉Transformer中的计算随着图像的块数呈二次扩展。请设计两种方法,利用图12.15中的原理来减少计算量。
问题 12.9 考虑使用16×16块的网格来表示一张图像,每个块由长度为512的块嵌入表示。比较在DaViT Transformer中执行注意力时所需的计算量:(i) 在块之间使用所有通道,(ii) 在通道之间使用所有块。
问题 12.10 注意力权重通常计算如下:
考虑使用点积
[译]第13章 图神经网络 - Graph neural networks 《理解深度学习 - Understanding Deep Learning》

本文是基于Simon J.D. Prince 的新书《Understanding Deep Learning》翻译而来;
- 原书介绍、原书(英文)下载、译文进展 以及 译文内容请戳 ↓↓↓
- [译]《理解深度学习 - Understanding Deep Learning 》 - 目录&前言 - ATA (atatech.org)
↓↓↓ 以下正文↓↓↓
本章目录
- 本章目录
- 第13章 图神经网络 - Graph neural networks
- 13.1 什么是图? - What is a graph?
- 13.2 图的表示 - Graph representation
- 13.3 图神经网络、任务和损失函数 - Graph neural networks, tasks, and loss functions
- 13.4 图卷积网络 - Graph convolutional networks
- 13.5 示例:图分类 - Example: graph classification
- 13.6 归纳模型 vs. 传导模型 - Inductive vs. transductive models
- 13.7 示例:节点分类 - Example: node classification
- 13.8 图卷积网络的图层 - Layers for graph convolutional networks
- 13.9 边图 - Edge graphs
- 13.10 总结 - Summary
- 13.11 笔记 - Notes
- 13.12 问题 - Problems
第13章 图神经网络 - Graph neural networks
第10章我们讨论了卷积神经网络,它主要用于处理规则的数据数组,比如图像。第12章我们介绍了Transformer,它专门处理可变长度的序列,比如文本。而在本章中,我们将要讨论的是图神经网络。正如其名所示,这些网络是专门用来处理图这种由节点和边构成的数据结构。
处理图数据面临着三个新的挑战。
- 首先,图的拓扑结构是可变的,这使得设计具有足够表达能力并且能够适应这种变化的网络变得非常困难。
- 其次,图的规模可能非常庞大,例如代表社交网络用户之间连接的图可能包含数十亿个节点。
- 第三,通常只有一个完整的图可用,所以传统的使用多个数据样本进行训练和测试的协议并不总是适用。
本章首先通过展示真实世界的图例来引入图的概念。然后详细描述了如何对这些图进行编码,并且如何将图的问题转化为监督学习问题。接着讨论了处理图的算法要求,这些要求自然地引出了一种特殊类型的图神经网络——图卷积网络。
13.1 什么是图? - What is a graph?
一个图是一种非常通用的结构,由一组“节点”或“顶点”组成,这些节点通过“边”或“链接”相互连接。图通常是稀疏的,只有一小部分可能的边是存在的。
现实世界中的许多物体可以用图的形式来表示。例如,道路网络可以被视为一个图,其中节点代表实际位置,边表示它们之间的道路关系(图13.1a)。化学分子可以看作是小型的图,其中节点代表原子,边表示化学键(图13.1b)。电路也可以用图来表示,其中节点代表组件和接头,边表示电连接(图13.1c)。

图13.1 显示了现实世界中的一些例子。道路网络、分子和电路都可以用图的结构来描述。
此外,许多数据集即使在表面上看起来不是图的形式,但实际上也可以用图来表示。例如:
- 社交网络就是一个图,其中节点代表人,边表示人之间的友谊关系。
- 科学文献可以看作是一个图,其中每个论文是一个节点,而引用关系则是边。
- 维基百科可以被视为一个图,其中每个文章是一个节点,而超链接则是边。
- 计算机程序可以表示为一个图,其中每个语法令牌(程序流程中的不同变量)是一个节点,而涉及这些变量的计算则是边。
- 几何点云可以表示为一个图,其中每个点是一个节点,与附近的其他点相连。
- 细胞中的蛋白质相互作用可以表示为一个图,其中每个蛋白质是一个节点,而相互作用则是边。
此外,一个集合(一个无序列表)可以被视为一个图,其中每个成员是一个节点,与其他每个成员相连。图像可以被视为一个具有规则拓扑结构的图,其中每个像素是一个节点,与相邻像素相连。
13.1.1 图的类型 - Types of graphs
图可以根据不同的特征进行分类。在图[13.2a]中,社交网络是一种无向图,其中每对个体通过无方向的边连接在一起,彼此成为朋友。而图[13.2b]中的引用网络则是一种有向图,其中每篇论文引用其他论文,这种关系是单向的。
图[13.2c]描述了一个知识图谱,它通过定义节点之间的关系来编码一组对象的事实。从技术上讲,它是一个有向异构多图。这个图是异构的,因为节点可以表示不同类型的实体,例如人、国家、公司等。而它是一个多图,因为任意两个节点之间可以存在多个不同类型的边。
在图13.2d中,我们可以将用于表示飞机的点集转换为图。这可以通过将每个点连接到其

- a) 社交网络是一种无向图,人与人之间的关系是对称的。
- b) 引用网络是一种有向图,一篇出版物引用另一篇,因此关系是非对称的。
- c) 知识图是一种有向异构多图。节点是异构的,表示不同的对象类型(人、地点、公司),多条边可能表示每个节点之间的不同关系。
- d) 通过在附近的点之间形成边,一个点集可以转换为图。每个节点在三维空间中有一个关联的位置,这被称为几何图(改编自胡等,2022)。
- e) 左边的场景可以用层次图表示。房间、桌子和灯的拓扑结构都由图表示。这些图构成一个更大的图,表示对象之间的邻接性(改编自费尔南德斯-马德里加尔和冈萨雷斯,2002)。
在深度学习中,我们可以处理各种类型的图。然而,在本章中,我们主要讨论无向图。例如,图13.2a中的社交网络。
13.2 图的表示 - Graph representation
除了图的结构本身外,通常还会将每个节点关联的信息存储起来。例如,在社交网络中,每个个体可以通过一个固定长度的向量来表示他们的兴趣。有时,边缘上也会有附加的信息。例如,在道路网络的例子中,每条边可以用长度、车道数、事故频率和速限来描述。节点上的信息存储在节点嵌入中,边缘上的信息存储在边嵌入中。
更正式地说,一个图由一组

图13.3 描述了如下内容。
- a) 这是一个示例图,包含六个节点和七条边。每个节点都有一个长度为五的嵌入(棕色向量)。每条边都有一个长度为四的嵌入(蓝色向量)。这个图可以用三个矩阵来表示。
- b) 邻接矩阵是一个二进制矩阵,其中的元素
表示节点 是否与节点 相连。 - c) 节点数据矩阵
包含了节点嵌入的拼接。 - d) 边数据矩阵
包含了边的嵌入。
图结构可以用邻接矩阵
每个节点
13.2.1 邻接矩阵的特性 - Properties of the adjacency matrix
邻接矩阵可以通过线性代数的方法来查找一个节点的邻居。我们可以将第
总的来说,如果我们将邻接矩阵的幂提升到

图13.4 展示了邻接矩阵的属性。
- a) 一个示例图。
- b) 邻接矩阵
中的位置 表示从节点 到节点 的行走距离为一的次数。 - c) 平方邻接矩阵
中的位置 表示从节点 到节点 的行走距离为二的次数。 - d) 在面板 (a) 中,节点六的 one-hot 向量被高亮显示。
- e) 当我们使用矩阵
对这个向量进行乘法运算时,结果中包含了从节点六到每个节点的行走距离为一的次数;我们可以通过一步到达节点五、七和八。 - f) 当我们使用矩阵
对这个向量进行乘法运算时,结果中包含了从节点六到每个节点的行走距离为二的次数;我们可以通过两步到达节点二、三、四、五和八,并且可以通过节点五、七和八以三种不同的方式回到原来的节点。
13.2.2 节点索引的置换 - Permutation of node indices
在图中,节点的索引是任意的,对这些索引进行排列会改变节点数据矩阵

图13.5 显示了节点索引的排列方式。
- a) 一个示例图,
- b) 相应的邻接矩阵和
- c) 节点嵌入。
- d) 相同的图,只是其中节点的(任意)顺序已经改变。
- e) 邻接矩阵
- f) 节点矩阵现在是不同的。因此,任何在图上运行的网络层都应该对节点的顺序不敏感。
通过数学表达,我们可以使用一个称为“置换矩阵”的矩阵
在这里,通过后乘
13.3 图神经网络、任务和损失函数 - Graph neural networks, tasks, and loss functions
图神经网络是一种模型,它以节点嵌入
当网络开始时,输入节点嵌入
13.3.1 任务和损失函数 - Tasks and loss functions
在开始讨论图神经网络模型之前,我们先描述一下这些网络所解决的问题类型以及它们所使用的损失函数。监督式图问题通常可以分为三类(见图13.6):

图13.6 常见的图任务。在每种情况下,输入都是由邻接矩阵和节点嵌入表示的图。图神经网络通过一系列的层来处理节点嵌入。最后一层的节点嵌入中包含了节点以及其在图中上下文的信息。
- a) 图分类。节点嵌入被组合起来(例如通过平均值),然后映射到一个固定大小的向量,通过softmax函数进行处理,从而生成类别的概率。
- b) 节点分类。每个节点嵌入被单独用于分类(青色和橙色分别表示节点的类别)。
- c) 边预测。与边相邻的节点嵌入被组合起来(例如通过点积)以计算一个数值,通过sigmoid函数处理该数值,从而生成缺失边存在的概率。
图级任务: 图级任务是指在整个图中为每个节点分配一个标签或预测一个或多个值的任务。这些任务利用了图的结构和节点的嵌入特征。举例来说,我们可以使用图级任务来预测某个分子在何种温度下会转变成液体(回归任务),或者判断某个分子对人类是否具有毒性(分类任务)。
在图级任务中,我们需要对输出节点嵌入进行组合。一种常见的方法是对节点嵌入进行平均求和,并使用线性变换或神经网络将其映射为固定大小的向量。对于回归任务,我们使用最小二乘损失函数来衡量预测结果与实际值之间的差异。而对于二分类任务,则需要使用sigmoid函数将输出映射到0和1之间,并使用二元交叉熵损失函数来度量预测结果与真实标签之间的差异。
在这里,我们可以使用以下公式来计算图属于类别1的概率:
在上述公式中,
节点级任务: 图的节点级任务是为图中的每个节点分配一个标签(分类)或一个或多个值(回归),通过使用图的结构和节点嵌入。例如,对于一个由三维点云组成的图,目标可能是根据节点是否属于机翼或机身对节点进行分类。节点级任务的损失函数与图级任务相同,只是现在在每个节点
边预测任务: 图的边预测任务是预测节点
13.4 图卷积网络 - Graph convolutional networks
存在许多类型的图神经网络,但在这里我们关注空间卷积图神经网络,即 GCNs。这些模型是卷积的,因为它们通过从附近节点聚合信息来更新每个节点。因此,它们引入了关系归纳偏置,即偏向于优先考虑邻居节点的信息。它们是基于空间的,因为它们使用原始图结构。这与基于谱的方法形成对比,后者在傅里叶域中应用卷积。GCN 的每一层都是一个函数
其中
13.4.1 等变性和不变性 - Equivariance and invariance
前面我们提到,图中节点的索引是任意的,对节点索引的置换不会改变图的特性。因此,任何模型都必须遵守这个特性。换句话说,每一层都必须是等变的,也就是说,如果我们对节点索引进行置换,每一层的节点嵌入也会以相同的方式进行置换。用数学术语来说,如果
对于节点分类和边预测任务,模型的输出也应该对节点索引的置换具有等变性。然而,对于图级任务来说,最后一层会从整个图中汇总信息,所以输出对于节点顺序是不变的。事实上,方程13.2的输出层可以实现这一点,因为:
其中
这个问题与图像处理类似,其中图像分割应该对几何变换具有等变性,而图像分类应该具有不变性(参见图10.1)。在这方面,卷积和池化层部分地实现了平移等变性,但目前还没有已知的方法可以确保在更一般的变换下完全具备这些属性。然而,对于图来说,可以定义网络来保证在置换下具有等变性或不变性。
13.4.2 参数共享 - Parameter sharing
第10章讨论了将全连接网络应用于图像是不明智的,因为这要求网络在每个图像位置上单独学习如何识别对象。相反,我们使用了卷积层,它们以相同的方式处理图像中的每个位置。这样做减少了参数的数量,并引入了归纳偏差,迫使模型以相同的方式处理图像的每个部分。
同样的理论也适用于图中的节点。我们可以为每个节点设计一个独立的参数模型。但是,这样的话,网络必须单独学习连接图中节点的意义,这意味着需要训练许多具有相同拓扑结构的图。相比之下,我们构建了一个在每个节点上使用相同参数的模型,从而减少了参数的数量,并且通过共享网络在每个节点上学习到的知识,在整个图中进行了信息传递。 回想一下,卷积(方程10.3)通过对周围邻居的加权信息进行汇总来更新变量。一种思考方式是,每个邻居向感兴趣的变量发送一条消息,这些消息被集合起来形成更新。当我们考虑图像时,邻居是当前位置周围固定大小的正方形区域中的像素,因此每个位置的空间关系是相同的。然而,在图中,每个节点可能有不同数量的邻居,并且没有统一的关系;没有一种方式可以使我们从“上方”节点的信息与从“下方”节点的信息有所区别。
13.4.3 示例GCN层 - Example GCN layer
这些思考过程引导产生了一个简单的 GCN 层(见图13.7)。在第

图13.7 简单的图卷积层。
- a) 输入图由结构(由图邻接矩阵
体现,未显示)和节点嵌入(存储在 的列中)组成。 - b) 第一个隐藏层中每个节点的更新步骤如下:(i) 合并相邻节点以形成一个向量,(ii) 对合并后的节点应用线性变换
,(iii) 对原始节点应用相同的线性变换 ,(iv) 将它们与偏置项 相加,最后 (v) 应用非线性激活函数 ,例如ReLU。 - c) 在后续层中重复以上过程(但每层有不同的参数),直到我们得到网络末尾的最终嵌入表示。
其中
我们可以更简洁地表示这个过程,通过注意到矩阵乘以向量的后乘返回其列的加权和。邻接矩阵
其中
这一层满足了设计要求:它对节点索引的排列具有等变性,可以处理任意数量的邻居,利用图的结构提供关系归纳偏好,并在整个图中共享参数。
13.5 示例:图分类 - Example: graph classification
现在,我们将这些想法结合起来,描述一个将分子分类为有毒或无害的网络。网络的输入是邻接矩阵和节点嵌入矩阵
邻接矩阵
网络方程如下:
其中,网络输出
13.5.1 批次训练 - Training with batches
在批次训练中,我们给定了
然而,每个图可能包含不同数量的节点。因此,矩阵
幸运的是,我们可以使用一种简单的技巧来并行处理整个批次。批次中的每个图都被视为单个大图的非交叉组件。然后,我们可以将网络作为网络方程的单个实例运行。均值池化操作仅在每个图上进行,以生成每个图的单一表示,然后将其输入到损失函数中。
13.6 归纳模型 vs. 传导模型 - Inductive vs. transductive models
到目前为止,本书中的所有模型都是归纳式的:我们使用一组带有标签数据的训练集来学习输入与输出之间的关系。然后,我们将学习到的规则应用到新的测试数据上。可以这样理解,我们正在学习如何将输入映射到输出的规则,然后将其应用到其他数据上。
相比之下,转导模型综合考虑了有标签和无标签的数据。它不会生成规则,而是对未知输出进行标注。这种方法有时被称为半监督学习。它的优点是可以利用无标签数据中的模式来辅助决策。然而,它的缺点是在添加额外的无标签数据时,需要重新训练模型。
这两种问题类型在图中经常出现(见图13.8)。有时,我们拥有大量带有标签的图,并且学习图与标签之间的映射关系。例如,我们可能有许多分子,每个分子都被标记为对人类是否有毒。我们学习将图映射到有毒/无毒标签的规则,然后将这些规则应用于新的分子。然而,有时候我们只有一个整体图。在科学论文引用图中,我们可能有一些节点表示领域(如物理学、生物学等)的标签,希望为其余节点进行标注。在这种情况下,训练和测试数据是不可分割的。

图13.8 归纳式与推理式问题。
- a) 归纳设置中的节点分类任务。我们给定一组
个训练图,其中节点标签(橙色和青色)是已知的。训练后,我们会得到一个测试图,必须为每个节点分配标签。 - b) 节点分类的传递设置。我们有一张大图,其中一些节点已被标记为橙色或青色,而其他节点的标签未知。我们的目标是训练一个模型来准确预测已知标记,并检查未知节点的预测结果。
图级任务通常只出现在归纳学习设置中,其中包含了训练图和测试图。然而,节点级任务和边预测任务可以在任何设置中进行。在传递式学习中,我们的目标是通过最小化模型输出与已知真实值之间的差异来计算损失函数。我们通过运行前向传播并获取未知真实值的结果来计算新的预测值。
13.7 示例:节点分类 - Example: node classification
作为第二个例子,我们来考虑在转导设置中的二元节点分类任务。我们从一个包含数百万个节点的商业规模的图开始。其中一些节点已经有了二元的真实标签,我们的目标是对其余未标记的节点进行标记。网络的主体部分与之前的例子相同(方程13.11),但最后一层不同,它产生一个大小为
其中函数
训练这个神经网络会遇到两个问题。首先,训练如此大规模的图神经网络在逻辑上是困难的。因为我们需要在前向传播中存储每个网络层的节点嵌入,这将涉及存储和处理一个整个图的几倍大小的数据结构,这可能是不切实际的。其次,我们只有一个图,所以如何进行随机梯度下降并不明显。如果只有一个对象,我们应该如何形成一个批次呢?
13.7.1 选择批次 - Choosing batches
一种形成批次的方法是在每个训练步骤中选择一组随机子集的标记节点。每个节点依赖于其前一层的邻居。这些邻居又依赖于它们在前一层的邻居,因此每个节点具有等效的感受野(图13.9)。感受野的大小被称为k-跳邻域。因此,我们可以使用形成批次节点的k-跳邻域的并集来执行梯度下降步骤;剩余的输入则不起作用。

图13.9 图神经网络中的感受野。考虑隐藏层二中的橙色节点(右侧),它接收隐藏层1中 “1跳邻域” 的节点的输入(中心的阴影区域)。隐藏层1中的这些节点依次接收其邻居的输入,而隐藏层2中的橙色节点则从 “2跳邻域“(左侧的阴影区域)中接收所有输入节点的输入。对于给定节点,贡献于其的图区域等同于卷积神经网络中感受野的概念。
然而,如果图中有很多层且密集连接,那么每个输入节点可能都在每个输出节点的感受野范围内。这就是所谓的图扩展问题。为了解决这个问题,我们可以采用两种方法:邻域采样和图分割。
邻居采样: 邻居采样是一种通过对完整图进行采样来减少每个网络层连接的方法(图13.10)。例如,我们可以从批次中的节点开始,并随机采样一定数量的上一层邻居。然后,我们再随机采样一定数量的上一层之前的邻居,以此类推。图仍然会随着每一层的增加而增大,但是可以更好地控制。每个批次都会重新进行这个过程,因此即使相同的批次被重复采样,贡献的邻居也会有所不同。这种方法类似于退出(第9.3.3节)并引入了一些正则化效果。

图 13.10 邻域采样。
- a)在处理大型图时,一种形成批次的方法是选择输出层中的一部分标记节点(这里仅为第二层的一个节点,右侧),然后向前回溯,找到 K-跳邻域(感受野)中的所有节点。只有这个子图需要用于训练该批次。不过,如果图的连接非常密集,那么这个子图可能会保留大部分的图结构。
- b)邻域采样是一种解决方案。当我们从最后一层向前回溯时,选择前一层中的一部分邻居节点(这里选择了三个),以及这些邻居节点在再前一层中的一部分邻居节点。这样可以限制用于训练批次的图的大小。在所有的图示中,亮度表示节点与原始节点之间的距离。
图分割: 第二种方法是在处理之前将原始图分割成互不相交的子区域(也就是不相连的小图)(见图 13.11)。有一些标准算法可以选择这些子区域以最大化内部连接的数量。这些小图可以被看作是批次,或者可以将其中的一些随机子集组合成一个批次(通过恢复它们之间的边来自原始图)。

图13.11 图分割。
- a) 输入图。
- b) 我们采用一种基于原则的方法,将输入图分割成较小的子图,以最小化边的移除数量。
- c-d) 现在,我们可以将这些子图作为批次在传导设置中进行训练,因此有四个可能的批次。
- e) 另外,我们可以使用子图的组合作为批次,并恢复它们之间的边。如果我们使用子图对,那么将有六个可能的批次。
使用上述方法之一形成批次后,我们现在可以像处理归纳设置一样训练网络参数,将标记的区域分为训练、测试和验证集,以便根据需要进行实验;我们已经成功地将一个归纳问题转化为了一个归纳问题。为了进行推理,我们根据未知区域的 k-hop 邻域计算预测值。与训练不同,这不需要存储中间表示,因此更节省内存。
13.8 图卷积网络的图层 - Layers for graph convolutional networks
在之前的例子中,我们使用了将相邻节点的消息与转换后的当前节点相加的方法来组合它们。这是通过将节点嵌入矩阵
13.8.1 合并当前节点和聚合邻居 - Combining current node and aggregated neighbors
在上述 GCN 层的示例中,我们通过将聚合的邻居
另一种变体是在将当前节点贡献到总和之前乘以因子
这被称为对角线增强。另一个相关变体是对当前节点应用不同的线性变换
在第三行中,我们定义了
13.8.2 残差连接 - Residual connections
残差连接通过对邻居节点的聚合表示进行变换,并在经过激活函数之前与当前节点进行求和或连接。对于后一种情况,相关的网络方程为:
13.8.3 均值聚合 - Mean aggregation
上述方法通过对节点嵌入进行求和来聚合邻居节点。然而,可以以不同的方式组合嵌入。有时候,取邻居的平均值可能比求和更好;如果嵌入信息更重要,而结构信息则不那么重要,那么这种方法可能更优,因为邻居贡献的大小不会取决于邻居的数量:
其中,
13.8.4 Kipf归一化 - Kipf normalization
基于均值聚合的图神经网络有很多变体。有时候,当前节点与其邻居一起参与均值计算,而不是单独处理。在Kipf归一化中,节点表示的和被规范化为:
这样做的逻辑是,来自邻居节点的信息应该被降权,因为邻居节点有很多连接,提供的唯一信息较少。这也可以使用度矩阵在矩阵形式下表示:
13.8.5 最大池化聚合 - Max pooling aggregation
另一种对置换不变的操作是计算一组对象的最大值。最大池化聚合操作符定义为:
其中,运算符
13.8.6 注意力机制的聚合 - Aggregation by attention
迄今为止,我们讨论的聚合方法要么对邻居的贡献进行相等加权,要么根据图的拓扑结构进行加权。然而,在图注意力层中,权重取决于节点的数据。我们将线性变换应用于当前节点的嵌入,得到以下形式的聚合:
接下来,我们计算每对转换后的节点嵌入
这里的
这个系统与 Transformers 中的自注意力计算非常相似(参见图13.12),但存在以下几点差异:(i) 键、查询和值都是相同的,(ii) 相似度的度量方式不同,(iii) 注意力被屏蔽,使得每个节点只关注自身和邻居节点。与 Transformers 类似,这个系统可以扩展为使用并行运行和重新组合的多个头部。

图13.12对比了图卷积网络、点积注意力和图注意力网络的工作原理。在每种情况下,这个机制都将存储在大小为
的矩阵 中的 个大小为 的嵌入映射为相同大小的输出。
- a) 图卷积网络将线性变换应用于数据矩阵,得到转换后的数据矩阵
。然后,它通过加权和来计算转换后的数据,其中权重是基于邻接矩阵的。接着,它添加一个偏置项 并将结果通过激活函数进行处理。 - b) 自注意机制的输出也是对输入进行转换后的加权和,但这次的权重是根据数据本身通过注意力矩阵来决定的。
- c) 图注意力网络将这两种机制结合在一起;权重既是基于数据计算得到的,也是基于邻接矩阵的。 这些变量被存储在一个大小为
的矩阵 中,其中每个元素代表节点之间的相似度。与点积自注意力一样,我们使用softmax操作将对每个输出嵌入的贡献归一化为正值,并且总和为一。然而,只有当前节点及其邻居节点的值应该有贡献。注意力权重被应用于变换后的嵌入:
13.9 边图 - Edge graphs
迄今为止,我们一直关注处理节点嵌入。这些嵌入会随着它们通过网络的传递而演变,以至于在网络的末端,它们能够同时表示节点本身和节点在图中的上下文。现在我们来考虑与图的边相关的信息的情况。
在将机器适应于处理边嵌入的方法中,一种常用的方法是使用边图(也被称为伴图或线图)。边图是一种补充图,其中原始图中的每条边都变成了一个节点,并且原始图中具有共同节点的每两条边在新图中都会创建一条边(见图13.13)。总的来说,边图可以恢复原始图,因此可以在这两种表示之间进行切换。

图13.13 展示了边图的示例:
- a) 是一个具有六个节点的图。
- b) 为了创建边图,我们为每条原始边分配一个节点(青色圆圈)
- c) 如果新的节点与原始图中的同一节点相连接,则连接它们
在处理边嵌入时,我们将图转换为边图。然后,我们使用相同的技术,从邻居节点中聚合信息,并将其与当前表示组合在一起。当节点嵌入和边嵌入同时存在时,我们可以在这两个图之间相互转换。现在有四种可能的更新方式(节点更新节点,节点更新边,边更新节点和边更新边),可以根据需要交替使用,或者稍作修改,可以同时从节点和边更新节点。
13.10 总结 - Summary
一个图由一组节点和它们之间的边组成。节点和边都可以携带数据,这被称为节点嵌入和边嵌入。图可以用来表示许多现实世界中的问题,我们的目标是确定整个图的属性,每个节点或边的属性,或者图中可能存在的额外边。
图神经网络是一种应用于图的深度学习模型。由于图中节点的顺序是任意的,图神经网络的层必须具备对节点索引的置换等变性。基于空间的卷积网络是一种图神经网络,它通过聚合节点的邻居信息,并使用这些信息来更新节点嵌入。 处理图的一个挑战是,它们通常出现在转导设置中,其中只有一部分图被标记,而不是一组用于训练和测试的图。此外,这些图往往非常庞大,这给训练带来了更多的挑战,并促使我们开发采样和分区算法。在边图(edge graph)中,每条边都有一个节点。通过将图转换为这种表示形式,我们可以使用图神经网络来更新边节点的嵌入。
13.11 笔记 - Notes
Sanchez-Lengeling et al., 2021和Daigavane et al., 2021介绍了使用神经网络进行图处理的入门文章。欲了解有关图神经网络研究的最新调查,请参阅Zhou et al., 2020a, Wu et al., 2020c和Veličković, 2023的文章,以及Hamilton, 2020和Ma&Tang, 2021的书籍。GraphEDM(Chami et al., 2020)将许多现有的图算法统一为一个框架。本章中,我们采用Bruna et al., 2013的方法将图与卷积网络相关联,但也与信念传播(Dai et al., 2016)和图同构测试(Hamilton et al., 2017a)密切相关。Zhang et al., 2019c提供了一个专注于图卷积网络的综述。Bronstein et al., 2021为几何深度学习提供了概述,包括在图上的学习。Loukas, 2020讨论了图神经网络所能学习的函数类型。
应用: 图分类(例如,Zhang等,2018b),节点分类(例如,Kipf&Welling,2017),边预测(例如,Zhang&Chen,2018),图聚类(例如,Tsitsulin等,2020)和推荐系统(例如,Wu等,2023)是图神经网络的一些应用领域。节点分类方法由Xiao等(2022a)进行了综述,图分类方法由Errica等(2019)进行了回顾,边预测方法由Mutlu等(2020)和Kumar等(2020a)进行了回顾。
图神经网络: 图神经网络是由Gori等人(2005年)和Scarselli等人(2008年)引入的概念,将其作为递归神经网络的一般化形式。后者采用了迭代更新的方法:
在这个公式中,每个节点嵌入
谱方法: Bruna等人(2013)在傅里叶域中应用了卷积操作。傅里叶基向量可以通过对图拉普拉斯矩阵进行特征分解来获得,其中
空间方法: 光谱方法最终是基于图拉普拉斯矩阵的,因此如果图发生变化,模型必须重新训练。这个问题促使了空间方法的发展。Duvenaud等人,2015在空间域中定义了卷积,使用不同的权重矩阵来组合每个节点度数的相邻嵌入。然而,这种方法的一个缺点是,如果某些节点具有非常大的连接数,那么它变得不切实际。为了解决这个问题,扩散卷积神经网络(Atwood&Towsley,2016)使用归一化邻接矩阵的幂来在不同尺度上混合特征,将这些特征相加,并通过激活函数生成节点嵌入。Gilmer等人,2017引入了“消息传递神经网络”,将图上的卷积定义为从空间邻居传播消息。GraphSAGE(Hamilton等人,2017a)的“聚合和组合”形式符合这一框架。
聚合与结合: 在图卷积网络中(Kipf & Welling, 2017),我们对邻居节点和当前节点进行加权平均,并应用线性映射和ReLU激活函数。GraphSAGE(Hamilton et al., 2017a)则是对每个邻居应用神经网络层,并取元素级别的最大值进行聚合。而Chiang等人(2019)则提出了“对角线增强”方法,在此方法中,先前的嵌入比邻居节点的嵌入更加重要。Kipf & Welling(2017)在图卷积网络中引入了Kipf归一化,根据当前节点和邻居节点的度数对邻居嵌入的总和进行归一化处理(见方程[13.19])。
混合模型网络或MoNet(Monti et al.,2017)进一步推进了这一点,通过学习一种基于当前节点和邻居度数的加权方法。他们为每个节点关联了一个伪坐标系统,其中邻居的位置取决于这两个数量。然后,他们使用基于高斯混合的连续函数,并在邻居的伪坐标处进行采样以获得权重。通过这种方式,他们能够学习节点和具有任意度数的邻居之间的权重关系。Pham et al.,2017则采用了节点嵌入和邻居的线性插值方法,同时使用不同的加权组合来处理每个维度。这个门控机制的权重是作为数据的一个函数生成的。
高阶卷积层: Zhou & Li(2017)引入了高阶卷积层,将邻接矩阵
残差连接: 在2017年,Kipf和Welling提出了一种残差连接的方法,即将原始的嵌入向量添加到更新后的嵌入向量中。Hamilton等人在2017年的研究中将前一层的嵌入向量连接到下一层的输出中,具体形式可见方程13.16。此外,Rossi等人在2020年提出了一种类似于Inception风格的网络,其中节点嵌入向量不仅与其邻居聚合的结果连接,还与两步内的所有邻居聚合的结果连接(通过计算邻接矩阵的幂)。另外,Xu等人引入了"jump knowledge connections"的概念,即每个节点的最终输出由整个网络中连接的节点嵌入向量级联而成。此外,Zhang和Meng在2019年提出了一种名为"GResNet"的残差嵌入的通用形式,并研究了几种变体,其中包括添加前一层的嵌入向量、输入嵌入向量或这些嵌入向量的某些版本(无需进一步转换)以聚合邻居节点的信息。
图神经网络中的注意力机制:Veličković等人,2019提出了图注意力网络(见图13.12c)。他们的模型使用了多头注意力机制,将多个头部的输出以对称的方式进行组合。另外,门控注意力网络(Zhang等人,2018a)根据数据本身来对不同头部的输出进行加权。Graph-BERT(Zhang等人,2020)则仅仅使用自注意力机制来进行节点分类。为了捕捉图的结构,类似于transformer(第12章)中捕捉单词的绝对或相对位置,Graph-BERT在数据中添加了位置嵌入,这些位置嵌入依赖于图中节点之间的跳数。
置换不变性: 在《DeepSets》一书中,Zaheer等人(2017)提出了一种处理集合的通用置换不变操作符。Janossy池化(Murphy等人,2018)认为许多函数不具备置换等变性,而是使用对置换敏感的函数,并对多个置换结果进行平均。
边图: 边图、线图或伴图的概念可以追溯到Whitney(1932)的研究。Kearnes等人(2016)提出了一种"编织"层的思想,通过更新节点嵌入、从节点嵌入更新边嵌入、从边嵌入更新节点嵌入以及从边嵌入更新边嵌入。然而,在这里,节点-节点和边-边的更新不涉及邻居信息。Monti等人(2018)引入了一种名为"对偶-原始图卷积神经网络"的现代形式,该网络在CNN框架中交替更新原始图和边图的表示。
图神经网络的威力: Xu等人(2019)认为,神经网络应该能够区分不同的图结构。如果两个具有相同初始节点嵌入但不同邻接矩阵的图被映射到相同的输出,这是不可取的。他们确定了一些以前的方法(如GCNs(Kipf&Welling,2017)和GraphSAGE(Hamilton等人,2017a))无法区分的图结构。为了解决这个问题,他们开发了一种更强大的架构,它具有与Weisfeiler-Lehman图同构测试相同的区分能力(Weisfeiler&Leman,1968)。这种架构被称为图同构网络,它基于聚合操作:
批次处理: 在最初的图卷积网络论文中(Kipf&Welling,2017),使用了全批量梯度下降。然而,这种方法在训练过程中的内存需求与节点数、嵌入大小和层数成正比,导致内存消耗很大。为了减少内存需求并在转导设置中为SGD创建批次,后续提出了三种方法:节点采样、层采样和子图采样。这些方法的目标是在减少内存需求的同时,保持模型的训练效果。
节点采样方法 首先随机选择一部分目标节点,然后通过网络逐步回溯,在每个阶段添加接收域中的一部分节点。GraphSAGE(Hamilton等人,2017a)提出了固定数量的邻居采样,如图13.10b所示。Chen等人(2018b)引入了一种方差缩减技术,但这仍然需要高内存要求,因为它使用了节点的历史激活信息。PinSAGE(Ying等人,2018a)从目标节点开始进行随机游走,并选择具有最高访问计数的K个节点。这优先选择与目标节点更密切相关的祖先。
在通过图的后向传播过程中,节点采样是必要的,它可以增加节点数量。为了解决这个问题,一种称为层采样方法的技术被提出。这种方法通过对每一层独立进行接收域采样来实现。层采样的示例包括FastGCN(Chen等,2018a)、自适应采样(Huang等,2018b)和层相关重要性采样(Zou等,2019)。
子图采样方法 是一种随机选择子图或将原始图划分为子图的方法。然后,这些子图被用作独立的数据样本进行训练。其中一些方法包括 GraphSAINT([Zeng等人,2020]()),该方法在训练过程中使用随机游走来采样子图,然后在子图上运行完整的GCN,以校正小批量的偏差和方差。Cluster GCN([Chiang等人,2019]())在预处理阶段通过最大化嵌入利用率或批内边的数量将图划分为簇,并随机选择簇来形成小批量。为了增加随机性,他们训练这些簇的随机子集以及它们之间的边(见图[13.11]())。
Wolfe等人(2021)提出了一种分布式训练方法,该方法通过在不同层级上对特征空间进行分区,并同时对较窄的GCN进行并行训练。关于图采样的更多信息可以在Rozemberczki等人(2020)的论文中找到。
正则化和归一化: Rong等人(2020)提出了一种名为DropEdge的方法,该方法通过在每次训练迭代中随机删除图中的边来掩盖邻接矩阵。这种操作可以应用在整个神经网络上,也可以逐层进行不同的处理(逐层DropEdge)。从某种意义上说,这类似于dropout,因为它打断了数据流的连接,但也可以被视为一种数据增强方法,因为改变图类似于扰动数据。Schlichtkrull等人(2018)、Teru等人(2020)和Veličković等人(2019)也提出了从图中随机删除边作为类似于dropout的正则化形式。节点采样方法(Hamilton等人,2017;Huang等人,2018;Chen等人,2018)也可以看作是正则化器。Hasanzadeh等人(2020)提出了一个通用框架,称为DropConnect,将上述许多方法统一起来。
还有许多标准化方案专门针对图神经网络进行研究,其中包括PairNorm(Zhao & Akoglu,2020)、权重归一化(Oono & Suzuki,2019)、可微分的分组归一化(Zhou等,2020b)和GraphNorm(Cai等,2021)。
多关系图: Schlichtkrull等,2018提出了一种针对多关系图(即具有多个边类型的图)的图卷积网络变体。他们的方案使用不同的参数来分别聚合每种边类型的信息。然而,如果存在许多不同的边类型,参数的数量可能会变得很庞大。为了解决这个问题,他们建议使用不同的参数基组合对每种边类型进行加权。
分层表示和汇聚: 在图像分类中,卷积神经网络(CNN)通过逐渐减小表示的大小来处理图像,但网络的深度增加后通道数会增加。然而,在本章中用于图像分类的图卷积网络(GCN)在最后一层之前会保留整个图,并将所有节点组合在一起计算最终的预测结果。Ying等人,2018b提出了DiffPool方法,它通过对图节点进行聚类来创建一个随着深度增加而逐渐变小的图,这种方法是可微分的,因此可以通过学习进行优化。该方法可以仅基于图结构完成,也可以根据图结构和节点嵌入自适应地进行。另外,还有其他汇聚方法,如SortPool(Zhang等人,2018b)和自注意图汇聚(Lee等人,2019)。有关用于图神经网络的汇聚层的比较,请参考Grattarola等人,2022。Gao&Ji,2019提出了基于U-Net的图编码器-解码器结构(见图11.10)。
几何图: MoNet模型([Monti et al.,2017]())能够利用几何信息,因为相邻节点在空间上具有明确的位置。该模型学习高斯函数的混合,并根据相邻节点的相对坐标进行采样。通过这种方式,它可以根据相对位置对相邻节点进行加权,就像标准的卷积神经网络一样,尽管这些位置并不是固定的。几何CNN([Masciet al.,2015]())和各向异性CNN([Boscaini et al.,2016]())将卷积运算应用于由三角网格表示的流形(即表面)。它们将表面局部逼近为平面,并在当前节点周围的该平面上定义一个坐标系。
过度平滑和悬停动画: 与其他深度学习模型不同,直到最近,图神经网络并没有明显受益于增加深度。事实上,原始的GCN论文(Kipf和Welling,2017)和GraphSAGE(Hamilton等,2017a)仅使用了两层,并且Chiang等人(2019)训练了一个五层的Cluster-GCN,在PPI数据集上获得了最先进的性能。一个可能的解释是过度平滑(Li等人,2018c);在每一层,网络会将更大邻居的信息纳入考虑,这可能最终导致局部信息的消失,而这些局部信息是重要的。事实上,(Xu等人,2018)证明了一个节点对另一个节点的影响与通过K步随机游走达到该节点的概率成正比。随着K的增加,这逼近于在图上进行随机游走的平稳分布,导致局部邻域被冲刷掉。
阿隆和雅哈夫(2021)提出了一个解释,解释了为什么增加网络深度不能提高性能。他们认为,增加深度可以允许信息通过更长的路径进行聚合。然而,在实际操作中,邻居数量呈指数增长的问题导致了一个瓶颈,即太多的信息被“压缩”到固定大小的节点嵌入中。
据Ying等人(2018a)指出,当神经网络的深度超过一定限制时,梯度不再向后传播,导致训练和测试都会失败。他们将这种现象称为“悬停状态”。类似地,当将许多层简单地添加到卷积神经网络中时,也会出现这种情况(如图11.2所示)。为了解决这个问题,他们提出了一种残差连接的方法,使得更深的网络可以得到有效的训练。Li等人(2021b)也将消失的梯度(第7.5节)视为一种限制。
近年来,通过采用各种形式的残差连接(如Xu等人,2018;Li等人,2020a;Gong等人,2020;Chen等人,2020b;Xu等人,2021a),我们已经能够训练更深的图神经网络。Li等人(2021a)还使用可逆网络减少了训练所需的内存,并在一个拥有超过1000层的最先进模型上进行了训练(见第16章)。
13.12 问题 - Problems
问题 13.1 请写出图13.14 中两个图的邻接矩阵。

问题 13.2∗ 绘制对应于以下邻接矩阵的图:
问题 13.3 ∗ 考虑图13.14 中的两个图。从节点一到节点二有多少种方式可以在(i)三步和(ii)七步内行走?
问题 13.4 图13.4c 中
问题13.6:证明:
其中
这里,
其中,
问题13.9 GraphSAGE 的作者(Hamilton et al.,2017a)提出了一种池化方法,其中节点嵌入与其邻居的嵌入平均在一起,使得:
请描述如何使用线性代数同时计算在
问题13.10∗ 设计一个基于点积自注意力的图注意力机制,并用 13.12 风格的图示显示其机制。
问题13.11∗ 绘制与图 13.15a 中的图相关联的边图。

图13.15 显示了问题13.11-13.13的图。
问题13.12∗ 绘制与图 13.15b 中的边图对应的节点图。
问题 13.13 对于一个通用的无向图,描述节点图的邻接矩阵与相应的边图的邻接矩阵之间的关系。
问题 13.14∗ 设计一个层,根据其邻居节点嵌入
[译]第14章 无监督学习 - Unsupervised learning 《理解深度学习 - Understanding Deep Learning》

本文是基于Simon J.D. Prince 的新书《Understanding Deep Learning》翻译而来;
- 原书介绍、原书(英文)下载、译文进展 以及 译文内容请戳 ↓↓↓
- [译]《理解深度学习 - Understanding Deep Learning 》 - 目录&前言 - ATA (atatech.org)
↓↓↓ 以下正文↓↓↓
本章目录
第14章 无监督学习 - Unsupervised learning
在前面的章节2-9中,我们介绍了监督学习的流程。我们定义了一个模型,它可以将观测数据
无监督学习模型是指在没有标签的情况下,通过对观察到的一组数据
本章将介绍无监督学习模型的分类方法,并讨论了这些模型的理想特性以及如何评估它们的性能。接下来的四章将详细介绍四种特定的模型:生成对抗网络(GANs)、变分自编码器(VAEs)、归一化流和扩散模型。^[1]^
^[1]^ 直到此刻,几乎所有相关的数学内容都已经融入到文中。然而,接下来的四章将需要坚实的概率知识基础。这些章节将包含相关的材料。
14.1 无监督学习模型的分类 - Taxonomy of unsupervised learning models
在无监督学习中,一种常见的策略是定义数据样本
在原则上,观测变量和潜在变量之间的映射可以是双向的。一些模型会将数据

图14.1 无监督学习模型的分类
- 无监督学习(Unsupervised learning) :是指在没有标签的数据集上训练的任何模型。
- 生成模型(Generative models) : 可以合成(生成)与训练数据具有相似统计特性的新示例。
- 概率模型(Probabilistic generative models),并定义了数据的分布。我们从这个分布中抽样来生成新的示例。
- 潜变量模型(Latent variable models): 定义了一个从潜在解释(潜变量)到数据的映射。它们可能属于上述任何一类。
第15到第18章的四个模型都是使用潜变量的生成模型。生成对抗网络(第15章)通过使用鼓励生成样本与真实样本难以区分的损失,从潜变量
归一化流、变分自编码器和扩散模型(第16-18章)都属于概率生成模型。它们不仅可以生成新的样本,还可以为每个数据点

图 14.2 拟合生成模型
- a) 生成对抗模型提供了一种生成样本的机制(橙色点)。随着训练的进行(从左到右),损失函数鼓励这些样本逐渐变得与真实样本(青色点)越来越难以区分。
- b) 概率模型(包括变分自编码器、归一化流和扩散模型)学习了训练数据的概率分布。随着训练的进行(从左到右),真实样本在该分布下的似然性增加,可以用于生成新样本和评估新数据点的概率。
由于概率分布的总和必须等于1,因此这个损失函数隐含地降低了远离观察数据的样本的概率。除了作为训练准则之外,分配概率本身也非常有用。我们可以使用测试集上的概率来定量比较两个模型的性能,也可以使用一个样本的概率来确定它是否属于同一数据集,或者是否是一个离群值。^[2]^
^[2]^ 需要注意的是,并非所有的概率生成模型都依赖于潜在变量。例如,Transformer解码器(第12.7节)是在没有标签的情况下训练的,它可以生成新的样本,并为这些样本分配概率。然而,Transformer模型的生成过程是基于自回归的(见方程12.15)。
14.2 一个好的生成模型应具备哪些特点? - What makes a good generative model?
基于潜变量的生成模型应满足以下要求:
- 高效的采样(Efficient sampling): 从模型中生成样本应该在计算上廉价,并利用现代硬件的并行性。
- 多样性的生成(High-quality sampling): 生成模型应该能够生成多样化的样本,而不仅仅是生成与训练数据一模一样的样本。这样可以提供更多的创造性和多样性。
- 准确的拟合(Coverage): 生成模型应该能够准确地拟合训练数据的分布,以便能够生成与训练数据相似的样本。这样可以确保生成样本的质量和真实性。
- 可解释性(Well-bahaved latent space): 生成模型应该能够提供对生成样本的解释,即能够揭示生成样本产生的原因和机制。这样可以增强对生成模型的理解和信任。
- 稳健性(Disentangled latent space): 生成模型应该对输入数据中的噪声和变化具有一定的鲁棒性,能够在存在噪声和变化的情况下仍然生成高质量的样本。
- 可扩展性(Efficient likelihood computation): 生成模型应该能够适应不同规模的数据集,并能够在大规模数据集上进行高效的训练和生成。
这自然引发了一个问题:我们所考虑的生成模型是否具备这些属性呢?答案是主观的,但图14.3对此提供了一些指导。具体的分配可能存在争议,但大多数从业者会同意,没有一种单一的模型能够同时满足所有这些特性。

图14.3 四种生成模型的特性。生成对抗网络(GANs)、变分自编码器(VAEs)、归一化流(Flows)和扩散模型(Diffusion)都没有完美特性的完整集合。
14.3 评估模型性能 - Quantifying performance
在前一节中,我们讨论了生成模型的理想特性。现在我们要考虑如何定量评估生成模型的成功程度。由于图像数据广泛可用且样本质量可以进行定性评估,因此许多生成模型的实验都使用了图像。因此,其中一些评估指标只适用于图像数据。
测试似然度(Test likelihood): 比较概率模型的一种方法是测量它们在测试数据集上的似然度。测量训练数据的似然度是无效的,因为模型可以给每个训练点分配非常高的概率,并在其他区域分配非常低的概率。这种模型的训练似然度很高,但只能复制训练数据。测试似然度捕捉了模型从训练数据中推广的程度,也反映了其覆盖能力;如果模型给训练数据的某个子集分配了很高的概率,那么它必须在其他地方分配较低的概率,因此一部分测试示例将具有较低的概率。
测试似然性是一种合理的量化概率模型的方法。然而,对于生成对抗模型、变分自编码器和扩散模型来说,它们并不涉及概率分配,因此似然性并不相关,并且估计代价很高(尽管可以计算对数似然性的下界)。归一化流是唯一一种能够准确且高效地计算似然性的模型类型。
创造性评分(Inception Score) :是一种用于评估生成模型在图像生成任务上的指标。通常情况下,该指标适用于在ImageNet数据库上进行训练的模型。创造性评分利用预训练的分类模型(通常是“Inception”模型)来计算。其计算基于两个标准。首先,对于每个生成的图像

图14.4 创造性评分。
- a) 预训练网络对生成的图像进行分类,如果生成的图像逼真,那么得到的类别概率
应该在正确的类别上呈现出高峰的形态。 - b) 如果模型生成的每个类别的频率都是相等的,边际(平均)类别概率应该是平坦的。Inception Score衡量的是(a)中的分布与(b)中的分布之间的平均距离。图片引用自Deng et al.,2009。
创造性评分是衡量深度学习模型在生成集合中表现的一种指标,它计算了生成分布与目标分布之间的平均距离。如果一个分布呈现尖峰形状,而另一个分布呈现平坦形状,那么这个距离就会很大(如图14.4所示)。更具体地说,创造性评分是期望 KL散度 的指数,该指数衡量了生成样本的条件概率分布
其中
需要注意的是,创造性评分只在对ImageNet数据库进行生成时才有意义,并且对于特定的分类模型非常敏感。重新训练模型可能会得到完全不同的数值结果。此外,创造性评分并不考虑同一对象类别内的多样性。如果模型只生成了每个类别的一个逼真样本,评分会更高。
Fréchet inception distance(FID): 这个指标也适用于图像。它衡量了生成样本和真实样本之间分布的对称距离。由于准确描述真实样本的分布是生成模型的首要任务,因此很难精确描述这两个分布。因此,FID通过使用多元高斯分布对这两个分布进行近似,并使用Fréchet距离来估计它们之间的距离。
然而,它并非根据原始数据的距离来进行模拟,而是根据Inception分类网络的最深层激活来进行比较。这些隐藏单元与物体类别之间具有最强相关性,因此比较是在语义层面上进行的,忽略了图像更细粒度的细节。这个度量指标确实考虑了类内多样性,但它严重依赖于Inception网络中特征所保留的信息;如果网络丢弃了任何信息,都不会对结果产生贡献。而一些被丢弃的信息可能仍然对生成逼真的样本至关重要。
流形的精确度/召回率: Fréchet inception distance对于样本的真实性和多样性都非常敏感,但无法区分这两个因素。为了解决这个问题,我们考虑了数据流形(即真实样本所在的数据空间子集)与模型流形(即生成样本所在的数据空间子集)之间的重叠部分。精确度是指模型生成的样本中落在数据流形内的比例,用来衡量生成样本中真实样本的比例。召回率是指真实数据中落在模型流形内的比例,用来衡量模型能够生成的真实数据的比例(见图14.5)。
为了对流形进行估计,我们通过在每个数据示例周围放置超球体来进行近似。这些球体的半径是通过与第k个最近邻的距离来确定的。通过这种方式,我们可以很容易地确定一个新点是否位于流形中。这种流形估计通常是在分类器的特征空间中进行计算的,具有相应的优点和缺点。

图14.5 流形精确率/召回率。
- a) 真实样本的真实分布和由生成模型生成的样本分布。
- b) 重叠部分可以通过精确度(合成样本与真实样本分布或流形重叠的比例)来总结,
- c) 以及召回率(真实样本与合成样本流形重叠的比例)。
- d) 合成样本的流形可以通过将一组以每个样本为中心的超球并集来进行近似。这里,这些超球的半径是固定的,但更常见的是半径基于到第k个最近邻的距离。
- e) 真实样本的流形也可以类似地进行近似。
- f) 精确度可以计算为位于样本近似流形内的真实样本比例。类似地,召回率可以计算为位于真实样本近似流形内的样本比例(未显示)。摘自Kynkäänniemi et al.,2019。
14.4 总结 - Summary
在没有标签的情况下,无监督模型可以学习数据集的结构。其中一类模型是生成模型,可以生成新的数据样本。另一类模型是概率模型,可以生成新的样本并对观察到的数据分配概率。接下来的四章讨论的模型都以已知分布的潜在变量
14.5 笔记 - Notes
流行的生成模型包括生成对抗网络(GAN)(Goodfellow等,2014),变分自编码器(VAE)(Kingma和Welling,2014),归一化流(NF)(Rezende和Mohamed,2015),扩散模型(Sohl-Dickstein等,2015;Ho等,2020),自回归模型(Bengio等,2000;Van den Oord等,2016b),以及基于能量的模型(LeCun等,2006)。除了能量模型之外,本书讨论了所有这些模型。最近,Bond-Taylor等人(2022)对生成模型进行了调查。
评估(Evaluation): Salimans et al., 2016引入了 inception score,Heusel et al., 2017引入了Fréchet Inception距离,两者都基于Inception V3模型的Pool-3层(Szegedy et al., 2016)。Nash et al., 2021使用了同一网络的较早层,这些层保留了更多的空间信息,以确保图像的空间统计特性也得到了复制。Kynkäänniemi et al., 2019引入了流形精确度/召回率方法。Barratt & Sharma, 2018详细讨论了Inception分数,并指出了其缺点。Borji, 2022讨论了评估生成模型的不同方法的利弊。
[译]第15章 生成对抗网络 - Generative Adversarial Networks 《理解深度学习 - Understanding Deep Learning》

本文是基于Simon J.D. Prince 的新书《Understanding Deep Learning》翻译而来;
- 原书介绍、原书(英文)下载、译文进展 以及 译文内容请戳 ↓↓↓
- [译]《理解深度学习 - Understanding Deep Learning 》 - 目录&前言 - ATA (atatech.org)
↓↓↓ 以下正文↓↓↓
本章目录
- 本章目录
- 第15章 生成对抗网络 - Generative Adversarial Networks
- 15.1 鉴别器作为一个信号 - Discrimination as a signal
- 15.2 提高稳定性 - Improving stability
- 15.2.1 GAN损失函数的分析 - Analysis of GAN loss function
- 15.2.2 梯度消失 - Vanishing gradients
- 15.2.3 Wasserstein 距离 - Wasserstein distance
- 15.2.4 离散分布的Wasserstein距离 - Wasserstein distance for discrete distributions
- 15.2.5 Wasserstein distance for continuous distributions - Wasserstein distance for continuous distributions
- 15.2.6 Wasserstein GAN损失函数 - Wasserstein GAN loss function
- 15.3 渐进增长、小批量区分和截断 - Progressive growing, minibatch discrimination, and
- 15.4 条件生成 - Conditional generation
- 15.5 图像转换 - Image translation
- 15.6 StyleGAN - StyleGAN
- 15.7 总结 - Summary
- 15.8 笔记 - Notes
- 15.9 问题 - Problems
第15章 生成对抗网络 - Generative Adversarial Networks
生成对抗网络(GAN)是一种无监督模型,旨在生成与训练样本难以区分的新样本。GAN只是一种创建新样本的机制;它们无法建立模型数据上的概率分布,因此无法评估新数据点属于相同分布的概率。
在生成对抗网络(GAN)中,主要的“生成器”网络通过将随机噪声映射到输出数据空间来创建样本。如果第二个“鉴别器”网络无法区分生成的样本和真实的样本,那么生成的样本必须是可信的。如果鉴别器能够辨别出差异,这个反馈信息可以用来改善样本的质量。这个想法很简单,但是训练 GAN 非常困难:学习算法可能不稳定,尽管 GAN 可能能够学会生成逼真的样本,但并不意味着它们能够生成所有可能的样本。
GAN 已经应用于许多类型的数据,包括音频、三维模型、文本、视频和图形。然而,它们在图像领域取得了最大的成功,在那里它们可以生成几乎与真实图片无法区分的样本。因此,本章的示例重点放在合成图像上。
15.1 鉴别器作为一个信号 - Discrimination as a signal
我们的目标是生成一组与真实训练数据
- (i) 从一个简单的基础分布(例如标准正态分布)中选择一个 潜变量
- (ii) 然后通过一个带有参数
的网络 对这个数据进行处理。
这个网络被称为 生成器。在学习过程中,我们的目标是找到参数
相似性可以用很多方式来定义,但生成对抗网络(GAN)使用的原则是样本在统计上应该和真实数据无法区分。为了达到这个目标,引入了第二个网络
图15.1展示了这个方案。我们从一个真实的1D示例训练集
其中,潜在变量

图 15.1 GAN 机制。
- a) 给定一个参数化函数(生成器),该函数合成样本(橙色箭头)和一批真实示例(青色箭头),我们训练一个鉴别器来区分真实示例和生成的样本(sigmoid曲线表示数据点是真实的概率)。
- b) 通过调整生成器的参数,使得鉴别器对于合成样本的置信度降低(在这个例子中,将橙色样本向右移动)。然后更新鉴别器。
- c) 通过交替更新生成器和鉴别器,使得生成的样本与真实样本无法区分,并减弱改变生成器的动力(即 sigmoid 函数的斜率)。
在初始化时,
我们在判别器和生成器之间交替进行更新。图15.1 b-c展示了这个过程的两个迭代。随着数据的分类越来越困难,改变
15.1.1 GAN 损失函数 - GAN loss function
现在我们来更准确地定义 GAN 的训练损失函数。鉴别器
其中
在这种情况下,我们假设真实样本
其中
现在我们用生成器的定义替换
15.1.2 GAN的训练 - Training GANs
方程15.4是一个比我们之前见过的更复杂的损失函数;鉴别器参数
为了训练生成对抗网络(GAN),我们可以将方程[15.4]分解为两个损失函数:
其中,我们将第二个函数乘以-1,将其转化为一个最小化问题,并去掉了第二项,因为它不依赖于
在每一步中,我们从基本分布中抽取一批潜在变量

图 15.2 GAN 的损失函数。从基本分布中抽取一个潜在变量
,通过生成器生成一个样本 。将样本批次 和真实样本批次 传递给判别器,它会给每个样本分配一个概率来判断其真实性。判别器参数 会被调整,使真实样本具有较高的概率,生成样本具有较低的概率。生成器参数 会被调整,以“欺骗”判别器,使生成样本具有较高的概率。
15.1.3 深度卷积生成对抗网络 - Deep convolutional GAN
深度卷积生成对抗网络(DCGAN)是一种早期的生成对抗网络架构,专门用于生成图像(图15.3)。生成器接收一个从均匀分布中采样得到的100维潜在变量

图 15.3 DCGAN 架构。在生成器中,从均匀分布中提取一个100维的潜变量
,并经过线性变换映射为具有1024个通道的 表示。然后,通过一系列卷积层逐渐上采样表示并减少通道数。最后,通过反正切函数将 的表示映射到一个固定范围,以表示一张图像。判别器使用标准的卷积网络,将输入分类为真实样本或生成样本。
训练结束后,判别器被丢弃。为了生成新样本,从基本分布中提取潜变量

图 15.4 DCGAN模型生成的图片
- a)从面部数据集训练的 DCGAN 中随机生成的样本。
- b)使用 ImageNet 数据库生成的随机样本(参见图 10.15)。
- c)从 LSUN 场景理解数据集中随机抽取的样本。改编自 Radford et al.,2015。
15.1.4 GAN 训练的难点 - Difficulty training GANs
理论上来说,GAN 相对来说是相当简单的。然而,GAN 的训练过程却以难度高而著称。例如,要使 DCGAN 能够可靠地训练,就需要进行以下操作:
- (i)在上采样和下采样时使用步幅卷积;
- (ii)在生成器和判别器中使用批量归一化(BatchNorm),除了最后一层和第一层之外;
- (iii)在判别器中使用泄露线性整流(leaky ReLU)激活函数(图 3.13);
- (iv)使用 Adam 优化器,但动量系数低于通常情况。这是不寻常的。大多数深度学习模型对这些选择相对较鲁棒。
一个常见的失败模式是,生成器生成了可信的样本,但这些样本只代表了数据的部分内容(例如,对于人脸,可能永远不会生成有胡须的脸)。这被称为“模式丢失”。在极端情况下,生成器完全或大部分忽略了潜在变量

图15.5 模式塌陷。通过使用类似于DCGAN的MLP生成器对LSUN场景理解数据集进行训练的GAN合成的图像。样本质量较低,许多样本相似。改编自Arjovsky等,2017。
15.2 提高稳定性 - Improving stability
为了理解为什么GAN很难训练,有必要准确理解损失函数代表的是什么。
15.2.1 GAN损失函数的分析 - Analysis of GAN loss function
如果我们将等式15.3中的两个求和项除以实际样本和生成样本的数量
这里,
最优的判别器取决于底层的概率:
将这个表达式代入方程15.6,我们得到:
忽略加法和乘法常数,这是合成分布
其中
第一个项表示,如果在样本密度
第二个项表示,如果在真实密度
15.2.2 梯度消失 - Vanishing gradients
在前一节中,我们看到当判别器达到最优时,损失函数最小化了生成样本和真实样本之间距离的度量。然而,使用概率分布之间的距离作为优化GAN的标准存在潜在问题。如果概率分布完全不相交,这个距离是无穷大的,对生成器的任何微小改动都不会减小损失。同样的现象也可以在考虑原始公式时看到;如果判别器能够完全将生成样本和真实样本分开,对生成数据的任何微小改动都不会改变分类得分(图 15.6)。

图 15.6 GAN 损失函数的问题。如果生成的样本(橙色箭头)与真实样本(青色箭头)很容易区分开来,那么鉴别器(sigmoid)在样本位置可能具有非常小的斜率;因此,用于更新生成器参数的梯度可能非常微小。
很不幸,生成的样本和真实样本的分布可能真的是不相交的;生成的样本位于一个大小为潜在变量
图 15.7 提供了实证证据支持这个假设。如果冻结 DCGAN 生成器,反复更新鉴别器以提高其分类性能,那么生成器的梯度会下降。简而言之,鉴别器和生成器之间需要一个非常微妙的平衡;如果鉴别器变得太好,生成器的训练更新就会减弱。

图 15.7 DCGAN 生成器中的梯度消失。生成器在1、10和25个时期后冻结,判别器继续训练。生成器的梯度迅速下降(注意对数刻度);如果判别器变得过于准确,生成器的梯度就会消失。改编自Arjovsky & Bottou, 2017。
15.2.3 Wasserstein 距离 - Wasserstein distance
前面的章节展示了两点:
- (i)GAN 损失可以用概率分布之间的距离来解释
- (ii)当生成样本与真实样本相差较大时,这个距离的梯度会变为零。
那么很明显,下一步就是选择一个具有更好性质的距离度量。
Wasserstein距离,或者(对于离散分布而言)地球移动者距离是指将概率质量从一个分布移动到另一个分布所需的工作量。这里的“工作量”是指质量乘以移动的距离。这个概念听起来更靠谱:即使分布是不相交的,Wasserstein距离也有明确定义,并且随着它们彼此靠近而平滑地减小。
15.2.4 离散分布的Wasserstein距离 - Wasserstein distance for discrete distributions
对于离散分布来说,Wasserstein距离最容易理解(见图15.8)。考虑在K个箱子上定义的分布

图 15.8 Wasserstein 距离或者地球物理距离。
- a) 考虑离散分布
。 - b) 我们希望通过移动概率质量来创建目标分布
。 - c) 运输计划
确定将有多少质量从 移动到 。例如,青色突出显示的正方形 表示将有多少质量从 移动到 。运输计划的元素必须是非负的,对 的求和必须等于 ,对 的求和必须等于 。因此, 是一个联合概率分布。 - d) 元素
和 之间的距离矩阵。最优的运输计划 通过最小化 和距离矩阵的逐点乘积之和(即Wasserstein距离)来实现。因此, 的元素通常位于距离成本最低的对角线附近。摘自Hermann , 2017。
Wasserstein距离定义如下:
限制条件为:
换句话说,Wasserstein距离是将一个分布的质量映射到另一个分布的一个受限制的最小化问题的解。这是不方便的,因为我们每次计算距离时都必须解决这个最小化问题中的元素
其中
^[1]^ 由于篇幅限制,本文省略了数学背景。线性规划是一个标准问题,已有众多已知算法可用于寻找最小解。
对于所有线性规划问题,都存在一个具有相同解的对偶问题。在这里,我们最大化一个变量
在这个约束条件下:
换句话说,我们在优化过程中,使用了一组新的变量
15.2.5 Wasserstein distance for continuous distributions - Wasserstein distance for continuous distributions
将这些结果转化为连续多维域,与原始形式(方程[15.10])等效的是:
在传输计划
其中,函数
15.2.6 Wasserstein GAN损失函数 - Wasserstein GAN loss function
在神经网络的背景下,我们通过优化神经网络
在每个位置
有一种方法是将判别器权重剪裁到一个小范围内(例如
15.3 渐进增长、小批量区分和截断 - Progressive growing, minibatch discrimination, and
Wasserstein公式使GAN的训练更加稳定。然而,为了生成高质量的图像,我们还需要采取进一步的措施。下面我们将介绍渐进增长、小批量区分和截断,这些方法都可以提高生成图像的质量。
在渐进生长(图15.9)中,我们首先训练一个使用类似于DCGAN的架构合成

图15.9 渐进生长。
- a)生成器最初训练用于创建非常小的
图像,鉴别器用于识别这些图像是合成的还是经过降采样的真实图像。 - b) 在训练完成低分辨率图像后,我们会在生成器中添加后续层来生成
的图像。类似的层也会被添加到鉴别器中,进行再次下采样。 - c) 这个过程会继续创建
的图像,以此类推。通过这种方式,我们可以训练出生成非常逼真的高分辨率图像的GAN。 - d) 不同阶段从相同潜在变量中生成的图像分辨率逐渐增加。改编自Wolf , 2021,使用Karras等人,2018的方法。
小批量区分 确保样本具有足够的多样性,从而有助于防止模式崩溃。这可以通过计算合成数据和真实数据的小批量之间的特征统计来实现。这些统计结果可以总结并添加为一个特征图(通常在判别器的末尾)。这样判别器就能向生成器发送一个信号,鼓励它在合成数据中包含与原始数据集中相似的变化量。
截断 是改进生成结果的另一个技巧(图15.10),在采样过程中只选择潜在变量
通过综合运用这些方法,GANs可以合成出多样且逼真的图像(图15.11)。此外,在潜在空间中平滑移动有时还能产生从一个合成图像到另一个合成图像的逼真插值(图15.12)。

图15.10 截断。通过拒绝潜在变量
距离均值超过 个标准差的样本,可以在GAN样本的质量和多样性之间进行权衡。
- a)如果这个阈值较大
,样本在视觉上是多样的,但可能存在缺陷。 - b-c) 随着阈值的降低,视觉质量平均提升,但多样性减少。
- d) 当阈值非常小的时候,样本几乎完全相同。通过合理地选择阈值,可以提高GAN结果的平均质量。改编自Brock等人,2019。

图15.11 渐进增长。这种方法在CELEBA-HQ数据集上训练时可以生成逼真的人脸图像,并在LSUN类别上训练时可以生成更复杂、多样化的物体。改编自Karras等人,2018。

图15.12 遍历LSUN汽车训练的渐进GAN的潜在空间。在潜在空间中移动会产生平滑变化的汽车图像。这通常只适用于短期轨迹;最终,潜在变量会移动到产生不真实图像的位置。改编自Karras等人,2018。
15.4 条件生成 - Conditional generation
GAN可以生成逼真的图像,但无法指定图像的属性,例如发色、种族或年龄,除非为每种属性组合单独训练GAN。条件生成模型可以使我们具备这种控制能力。
15.4.1 条件GAN - Conditional GAN
在条件GAN中,生成器和判别器都接收一个属性向量

Figure 15.13 条件生成.
- a) 条件生成(Conditional GAN): 对抗网络的生成器还接收一个属性向量
,用于描述图像的某个方面。与往常一样,判别器接收真实样本或生成样本,但现在它还接收属性向量;这既促使生成的样本逼真,又使其与属性相匹配。 - b) 辅助分类生成对抗网络(Auxiliary classifier GAN , ACGAN): 的生成器使用离散属性变量。判别器必须同时(i)确定输入是真实的还是合成的,以及(ii)正确分类。
- c) InfoGAN: 将潜变量分为噪声
和未指定的随机属性 。判别器必须判断其输入的真实性,并重构这些属性。实际上,这意味着变量 对应于数据的显著方面,并具有现实世界的解释(即,潜空间是“解耦”的)。
对于生成器来说,在潜在向量
15.4.2 辅助分类生成对抗网络 - Auxiliary classifier GAN
辅助分类器生成对抗网络(ACGAN)通过要求鉴别器正确预测属性(图15.13b)来简化条件生成。对于具有

图 15.14 辅助分类器 GAN。生成器不仅接受潜在向量,还接受类标签作为输入。判别器必须既识别数据点是否真实,又预测类标签。该模型是在十个 ImageNet 类别上进行训练的。从左到右:生成的茱莉蔷薇蝴蝶、金翅雀、雏菊、红脚鹬和灰鲸的示例。改编自 Odena et al. , 2017 。
15.4.3 InfoGAN - InfoGAN
条件 GAN 和 ACGAN 都可以生成具有预设属性的样本。相比之下,InfoGAN(图 15.13c)尝试自动识别重要的属性。生成器接收由随机噪声变量
我们的洞察力是,可解释的现实世界特征最容易预测,因此会在属性变量

图15.15 InfoGAN for MNIST
- a) MNIST数据库中的训练样本,包含手写数字的
像素图像。 - b) 第一个属性
是分类型变量,有10个类别;每一列显示的都是由其中一个类别生成的样本。InfoGAN可以恢复这十个数字。属性向量 和 是连续的。 - c) 从左到右,每一列代表了
的不同值,同时保持其他潜变量不变。这个属性似乎与字符的方向对应。 - d) 第三个属性似乎与笔画的粗细对应。改编自Chen et al. , 2016b。
15.5 图像转换 - Image translation
尽管对抗式鉴别器最初是在生成随机样本的 GAN 中使用的,但它也可以作为一种先验,用于在将一个数据示例转化为另一个数据示例的任务中追求现实主义。这在图像领域最为常见,我们可能希望将灰度图像转化为彩色图像,将噪声图像转化为清晰图像,将模糊图像转化为清晰图像,或将素描转化为逼真的照片。
本节讨论了三种使用不同数量手动标注的图像转换模型。Pix2Pix 模型使用了训练时的前后图像对。对抗损失模型在主模型中使用了前后图像对,但在鉴别器中还利用了未配对的“后”图像。CycleGAN 模型使用了未配对的图像。
15.5.1 Pix2Pix - Pix2Pix
Pix2Pix 模型(图 15.16 )是一个网络

图 15.16 Pix2Pix 模型。
- a)该模型使用U-Net来将输入图像转换为不同风格的预测(详见图11.10)。在这个案例中,它将灰度图像映射为似乎合理的彩色版本。U-Net通过两种损失进行训练。首先,内容损失鼓励输出图像与输入图像具有相似的结构。其次,对抗损失鼓励灰度/彩色图像对在每个局部区域内与真实图像对无法区分。这个框架可以用于许多任务,包括
- b)地图转换为卫星图像,
- c)将手提包的草图转换为逼真的示例,
- d)彩色化
- e)将标签地图转换为逼真的建筑立面。改编自Isola et al. ,2017。
然而,输出的图像也应该像输入图像的真实转换一样。为了实现这一点,我们引入了一个对抗鉴别器
这个模型可以被看作是一个条件GAN,其中U-Net作为生成器,与其说是基于标签,不如说是基于图像。然而,需要注意的是,U-Net的输入并不包含噪声,所以在传统意义上并不能称之为"生成器"。有趣的是,原始作者尝试在U-Net中添加了噪声
15.5.2 对抗损失 - Adversarial loss
Pix2Pix模型的判别器试图区分图像转换任务中的前/后对是否合理。这种方法的缺点是我们需要有关前/后对的真实数据来利用判别器的损失。幸运的是,我们可以在监督学习的背景下利用对抗判别器的能力,而无需额外的标记训练数据。
如果一个鉴别器可以从监督网络的输出中区分出真实示例和其输出领域中的样本,那么对抗性损失就会进行惩罚。因此,监督模型会调整其预测结果以减少这种惩罚。这可以在整个输出的范围内进行,也可以像Pix2Pix算法一样在补丁级别进行。这有助于提高复杂结构输出的真实感。然而,这并不一定会在原始损失函数方面得到更好的解决方案。
超分辨率生成对抗网络(SRGAN) 使用了这种方法(图15.17)。主要的模型是一个卷积网络,通过残差连接将低分辨率图像转换为高分辨率图像。该网络通过三种损失进行训练。内容损失衡量输出图像与真实高分辨率图像之间的平方差异。VGG损失或感知损失通过VGG网络将生成的图像和真实的图像通过,并衡量它们的激活值之间的平方差异。这样可以使生成的图像在语义上与目标图像相似。最后,对抗损失使用一个判别器,试图区分生成的图像是真实的高分辨率图像还是上采样图像。这样可以使生成的图像与真实示例无法区分。

图 15.17 超分辨率生成对抗网络(SRGAN)
- a) 通过训练带有残差连接的卷积网络,可以将图像的分辨率提高四倍。这个模型具有一些损失函数,它们鼓励生成的图像与真实高分辨率图像尽可能接近,同时还包括了一个对抗损失函数,以惩罚那些可以与真实高分辨率图像区分开的结果。
- b) 使用双三次插值进行上采样的图像。
- c) 使用SRGAN进行上采样的图像。
- d) 使用双三次插值进行上采样的图像。
- e) 使用SRGAN进行上采样的图像。引自Ledig等人,2017。
15.5.3 CycleGAN - CycleGAN
对抗损失假设我们有主要监督网络的标记过的前后图片。CycleGAN 解决的是我们有两组数据,具有不同风格但没有匹配对的情况。一个例子是将一张照片转换成莫奈的艺术风格。虽然存在很多照片和莫奈的画作,但它们之间没有一一对应的关系。CycleGAN利用了这样一个思想,即将一张图片从一个方向转换(例如,照片转换为莫奈画作),然后再转回来应该能够恢复原始图片。
CycleGAN的损失函数是三个损失的加权和(图15.18)。内容损失鼓励前后图像的相似性,基于

图15.18 CycleGAN。两个模型同时进行训练。第一个模型通过将第一个风格(马)的图像
转换为第二个风格(斑马)的图像 来进行训练。而第二个模型则通过将第二个风格(斑马)的图像 转换回第一个风格(马)的图像 来进行训练。如果两个模型不能成功地将图像转换到另一个风格,并返回原始图像,循环一致性损失将对两个模型进行惩罚。此外,两个对抗性损失鼓励转换后的图像看起来像目标风格的真实示例(这里仅显示斑马)。而两个内容损失则鼓励映射前后的图像细节和布局相似(即斑马的位置和姿势与马相同,背景也相同,反之亦然)。引自Zhu et al. , 2017。
15.6 StyleGAN - StyleGAN
StyleGAN是一种更现代的生成对抗网络(GAN),它将数据集中的变化划分为有意义的组成部分,每个部分由一部分潜在变量控制。特别是,StyleGAN可以控制不同尺度上的输出图像,并将样式与噪声分离。对于人脸图像来说,大尺度的变化包括脸型和头部姿势,中尺度的变化包括面部特征的形状和细节,细小尺度的变化包括头发和皮肤颜色。样式部分代表了对人类来说重要的图像特征,而噪声部分则代表了不重要的变化,比如头发、胡须、雀斑或皮肤毛孔的具体位置。
迄今为止,我们见过的生成对抗网络(GANs)都是从一个从标准基本分布中抽取的潜在变量

图 15.19 StyleGAN。主要的流程(中间行)以一个已学习的常数表示(灰色框)开始。通过一系列卷积层,逐渐上采样生成输出。噪声(顶行)通过定期添加具有通道缩放
的高斯变量 在不同尺度上进行添加。高斯风格变量 经过全连接网络生成中间变量 (底行)。这些变量用于在流程的各个阶段设置每个通道的均值和方差。
StyleGAN的主要生成分支从一个512通道的
表示噪声的潜在变量是独立采样的高斯向量
代表风格的潜变量最初是一个

图 15.20 StyleGAN 的结果。前四列展示了不同尺度上风格的系统变化。第五列展示了增加噪声幅度的效果。最后两列展示了在两个不同尺度上的不同噪声向量。
15.7 总结 - Summary
GANs 学习一个生成器网络,将随机噪声转化为与训练集几乎无法区分的数据。为此,生成器使用一个判别器网络进行训练,该网络试图区分真实样本和生成样本。然后,生成器被更新,以使其创建的数据被判别器认定为更"真实"的数据。这个想法原本存在的一个缺陷是,当容易确定样本是真实还是生成的时候,训练信号会很弱。因此出现了改进的 Wasserstein GAN,它提供了一个更一致的训练信号。
我们回顾了用卷积GAN生成图像的方法,以及一系列提高生成图像质量的技巧,包括渐进增长、小批量区分和截断。条件GAN的结构引入了辅助向量,可以对输出进行控制(例如,选择对象类别)。图像转换任务在保留了条件信息的同时去除了随机噪声。GAN的判别器现在作为额外的损失项,有利于生成"逼真"的图像。最后,我们介绍了StyleGAN,它通过在生成器中巧妙地注入噪声,可以控制不同尺度上的样式和噪声。
15.8 笔记 - Notes
生成对抗网络(GAN)是由Goodfellow et al., 2014提出的。早期的研究进展可以在Goodfellow, 2016中找到。近期的综述包括Creswell et al., 2018和Gui et al., 2021。Park et al., 2021提供了一个关注计算机视觉应用的GAN模型的综述。Hindupur, 2022维护了一个包含已命名GAN模型的列表(目前有501个模型),从ABC-GAN(Susmelj et al., 2017)到ZipNet-GAN(Zhang et al., 2017b)。Odena, 2019列出了与GAN相关的待解决问题。
数据: GAN主要是为图像数据开发的。例如,本章介绍的深度卷积GAN(Radford等人,2015年)、渐进式GAN(Karras等人,2018年)和StyleGAN(Karras等人,2019年)模型。因此,大多数GAN都基于卷积层,然而最近也有一些利用生成器和判别器中的transformer来捕捉长程相关性的GAN被开发出来(例如SAGAN,Zhanget al.,2019b)。除此之外,GAN还被用于生成分子图(De Cao&Kipf,2018年)、语音数据(Saito等人,2017年;Donahue等人,2018b;Kaneko&Kameoka,2017年;Fang等人,2018年)、EEG数据(Hartmann等人,2018年)、文本(Lin等人,2017a;Fedus等人,2018年)、音乐(Mogren,2016年;Guimaraes等人,2017年;Yu等人,2017年)、3D模型(Wu等人,2016年)、DNA(Killoran等人,2017年)和视频数据(Vondrick等人,2016年;Wang等人,2018a)。
GAN损失函数: 最初声称GAN在训练过程中会收敛到纳什均衡。然而,最新的证据表明这并不总是成立。有研究人员发现最初的GAN损失函数是不稳定的,因此提出了不同的公式。例如,有人引入了最小二乘GAN,通过选择适当的参数,可以隐含地最小化皮尔逊
Arjovsky & Bottou,2017分析了GAN中的梯度消失问题,并由此提出了基于"地球运输距离/最优传输"的Wasserstein GAN(Arjovsky et al.,2017)。Wasserstein GAN的公式要求鉴别器的Lipschitz常数小于1;原始论文提出了剪辑鉴别器权重的方法,但后续的研究则采用了梯度惩罚(Gulrajani et al.,2016)或应用了谱归一化(Miyatoet al.,2018)来限制Lipschitz常数。关于Wasserstein GAN的其他变种由Wu et al.,2018a,Bellemare et al.,2017b和Adler & Lunz,2018引入。Hermann,2017在一篇优秀的博客文章中讨论了对偶性和Wasserstein GAN。如果你想了解更多关于最优传输的信息,请参考Peyré et al.,2019的书籍。Lucic et al.,2018对GAN损失函数进行了实证比较。
训练 GAN 的技巧: 有很多启发式方法可以提高训练 GAN 的稳定性和最终结果的质量。Marchesi,2017首次使用了截断技巧(图 15.10),以在 GAN 输出的多样性和质量之间达到平衡。这个方法也被Pieters&Wiering,2018和Brock等,2019提出,并增加了一个正则化项,鼓励生成器中的权重矩阵正交。这意味着截断潜在变量与截断输出方差之间有更密切的关系,并且可以提高样本的质量。
其他的技巧包括只使用最真实的前K个图像的梯度(Sinha et al.,2020),在判别器中使用标签平滑(Salimans et al.,2016),使用生成图像的历史而不是最新生成器产生的图像来更新判别器,以避免模型的“振荡”(Salimans et al.,2016),并在判别器输入中添加噪声(Arjovsky&Bottou,2017)。Kurach et al.,2019对GAN中的标准化和正则化进行了概述。Chintala et al.,2020提供了进一步训练GAN的建议。
样本多样性: 最初的 GAN 论文(Goodfellow等人,2014)认为,只要容量、训练样本和计算时间足够,GAN 就可以学会让生成的样本与真实分布之间的差异最小化。然而,后续的研究对此提出了质疑。Arora等人(2017)指出,鉴别器的有限容量意味着即使输出分布的变化有限,GAN 的训练目标也可以接近最优值。Wuet al.(2017)使用退火重要性采样近似计算 GAN 生成的分布的对数似然,并发现生成的分布与真实分布存在不匹配。Arora和Zhang(2017)要求人类观察员识别出 GAN 生成的(近似)重复样本,并通过这些重复样本的频率推断图像的多样性。他们发现,对于 DCGAN,400个样本中有重复出现的概率超过50%;这意味着支持的大小约为400,000,小于训练集的大小。他们还表明,多样性随着鉴别器规模的增加而增加。Bau等人(2019)采用了不同的方法,研究了 GAN 无法生成的数据空间的部分内容。
增加多样性和防止模式坍塌: 缺乏多样性的极端情况是模式坍塌,即网络反复生成相同的图像(Salimans et al.,2016)。这在条件生成对抗网络中是一个特殊的问题,因为有时会完全忽略潜在变量,输出仅仅取决于条件信息。Mao et al.,2019引入一种正则化项来帮助防止条件生成对抗网络中的模式坍塌,该项通过最大化生成图像与相应潜在变量之间的距离比率来鼓励输出的多样性。其他旨在减少模式坍塌的工作包括VEEGAN(Srivastava et al.,2017),它引入了一个重构网络,将生成的图像映射回原始的噪声,从而防止了从噪声到图像的多对一映射。
Salimans等,2016建议在小批量计算统计数据,并通过鉴别器确保这些数据与真实图像批次的统计数据无法区分,这被称为“小批量鉴别”,此方法通过在鉴别器的最后添加一层实现,该层学习每个图像的张量以捕捉批处理的统计数据。Karras等,2018对此进行了简化,他们在小批量上计算每个空间位置上每个特征的标准差,然后对空间位置和特征进行平均,得出一个单一的估计值,再复制一份得到一个单一的特征图,该特征图附加在鉴别器网络的末端。Lin等,2018将连接的(真实或生成的)样本传递给鉴别器,并提供了关于如何向鉴别器提供多个样本以增加多样性的理论分析。MAD-GAN(Ghosh等,2018)通过使用多个生成器,并要求单个鉴别器识别生成器创建的样本,从而提供一个信号来帮助推动生成器创建不同于其他生成器的样本,以增加GAN样本的多样性。
多尺度: 为了确保图像在所有频带上的质量都很高,Wang et al. , 2018b采用了不同尺度上的多个判别器。其他研究也提出了在不同分辨率下定义生成器和判别器的方法(Denton et al. , 2015; Zhang et al. , 2017d; Huang et al. , 2017c)。Karras et al. , 2018引入了一种渐进增长的方法(图15.9),该方法相对简单且训练速度更快。
StyleGAN: Karras et al. , 2019 提出了 StyleGAN 框架(第 15.6 节)。在随后的工作中(Karras et al. ,2020b),他们通过重新设计生成器中的归一化层,消除了“水滴”伪影,并通过改变渐进增长框架,减少了细节不随粗略细节变化的伪影,从而提高了生成图像的质量。此外,还开发了使用有限数据训练 GAN 的方法(Karras et al. ,2020a),修复了混淆伪影(Karras et al. ,2021)。大量的研究工作发现并操作 StyleGAN 中的潜在变量来编辑图像(例如,Abdal et al. ,2021;Collins et al. ,2020;Härkönen et al. ,2020;Patashnik et al. ,2021;Shenet al. ,2020b;Tewari et al. ,2020;Wu et al. ,2021;Roich et al. ,2022)。
条件生成对抗网络(Conditional GANs): 条件生成对抗网络是由Mirza & Osindero, 2014开发的,辅助分类生成对抗网络是由Odena等人,2017开发的,InfoGAN是由Chen等人,2016b开发的。这些模型的判别器通常将条件信息附加到判别器输入(Mirza & Osindero, 2014;Denton等人,2015;Saito等人,2017)或者附加到判别器中间隐藏层(Reed等人,2016a;Zhang等人,2017d;Perarnau等人,2016)。然而,Miyato & Koyama,2018尝试在判别器的一层中使用嵌入式条件信息与内积的方法,这受到了潜在概率模型中类别信息的影响。GAN生成的图像可以根据类别(如Odena等人,2017)、输入文本(Reed等人,2016a;Zhang等人,2017d)、属性(Yan等人,2016;Donahue等人,2018a;\mathbf xiao等人,2018b)、边界框和关键点(Reed等人,2016b)以及图像(如Isola等人,2017)进行条件约束。
图像翻译: Isola等人,2017开发了Pix2Pix算法(图15.16),随后Wang等人,2018b开发了一个更高分辨率结果的类似系统。StarGAN(Choi等人,2018)使用单个模型在多个领域之间进行图像到图像的翻译。循环一致性损失的概念由Zhou等人,2016b在DiscoGAN和Zhu等人,2017在CycleGAN(图15.18)中引入。
对抗性损失: 在许多图像翻译任务中,并没有"生成器";这样的模型可以看作是具有对抗性损失的监督学习任务,以提高图像的真实感。Ledig等人,2017的超分辨率算法是一个很好的例子(图15.17)。Esser等人,2021使用了一个带有对抗性损失的自编码器。该网络接收一张图像,将其表示大小减小以创建一个"瓶颈",然后通过这个减小的数据空间重新构建图像。在实践中,该架构类似于编码器-解码器网络(例如,图10.19)。经过训练,自编码器能够产生接近图像并具有高度逼真性的结果。他们对自编码器的瓶颈进行矢量量化(离散化),然后使用transformer解码器学习离散变量上的概率分布。通过从该transformer解码器中进行采样,他们能够生成极大且高质量的图像。
**反转 GANs:**一种编辑真实图像的方法是将其映射到潜在空间,操纵潜在变量,然后重新映射到图像空间。这个过程称为重合成。不幸的是,GANs 只能从潜在变量映射到观察数据,而不能反过来。因此,出现了一些反转 GANs 的方法(即找到与观察图像最相似的潜在变量)。这些方法可以分为两类。第一类是学习一个将方向反转的网络(Donahue et al.,2018b; Luo et al.,2017a; Perarnau et al.,2016; Dumoulin et al.,2017; Guan et al.,2020),这被称为编码器。第二类方法是从某个潜在变量
StyleGAN 的反转引起了特别大的关注,因为它能够产生出色的效果,并且可以在不同的尺度上控制图像。不幸的是,Abdal et al.,2020年 表明,在没有伪影的情况下无法完美地反转 StyleGAN,并提出了将其反转到扩展风格空间,而 Richardson et al., 2021年 训练了一个可靠的编码器将其映射到该空间。即使反转到扩展空间后,对于超出领域的图像进行编辑可能仍然效果不佳。Roich et al., 2022年 解决了这个问题,他们通过微调 StyleGAN 的生成器来实现图像的精确重构,并展示了良好的编辑结果。他们还添加了额外的项来精确重构附近的点,以便修改是局部的。这种技术被称为“关键微调”。在 \mathbf xia et al., 2022年 中可以找到关于 GAN 反转技术的调查。
使用GAN进行图像编辑: iGAN([Zhu et al.,2016]())允许用户通过涂鸦或扭曲现有图像的部分进行交互式编辑。然后,该工具会调整输出图像,使其既逼真又符合这些新的约束条件。它通过寻找一个潜在向量来生成一个与编辑图像相似且符合任何添加线条的边缘图的图像。通常还会添加一个蒙版,以仅更改靠近编辑部分的图像区域。EditGAN([Ling et al.,2021]())同时对图像及其语义分割蒙版进行建模,并允许对蒙版进行编辑。
15.9 问题 - Problems
问题15.1 当
问题15.2∗ 写出将方程[15.8]中的损失
问题 15.3 考虑使用原始形式的线性规划计算地球移动距离。离散分布
请列出
问题 15.4∗ 计算 (i)
对于范围
问题15.5 一维高斯分布之间的
和
在
问题 15.6 假设有一个维度为 100 的潜变量
[译]第16章 正则流 - Normalizing flows 《理解深度学习 - Understanding Deep Learning》7

本文是基于Simon J.D. Prince 的新书《Understanding Deep Learning》翻译而来;
- 原书介绍、原书(英文)下载、译文进展 以及 译文内容请戳 ↓↓↓
- [译]《理解深度学习 - Understanding Deep Learning 》 - 目录&前言 - ATA (atatech.org)
↓↓↓ 以下正文↓↓↓
本章目录
- 本章目录
- 第16章 正则流 - Normalizing flows
第16章 正则流 - Normalizing flows
在第15章,我们介绍了生成对抗网络(GAN)。这是一种生成模型,通过将潜在变量通过深度网络传递以创建新样本。GAN的训练原则是使生成的样本与真实数据无法区分。然而,它们并没有定义数据示例的分布,因此评估一个新示例属于同一数据集的概率并不简单。
在本章中,我们将介绍“正则流”。通过使用深度网络将简单分布转变为更复杂的分布,正则流可以学习一个概率模型。正则流不仅可以从该分布中进行采样,还可以评估新示例的概率。而为了实现这一点,正则流需要使用一种特殊的架构:每层都必须是可逆的,即能够在两个方向上转换数据。
16.1 1D示例 - 1D example
标准化流是一种概率生成模型:它将一个概率分布拟合到训练数据中(图14.2b).考虑对一个1D分布

图 16.1 转换概率分布。
- a)基础密度是在一个潜在变量
上定义的标准正态分布。 - b) 这个变量经过函数
的转换,得到了一个新的变量 , - c) 其具有了一个新的分布。为了从这个模型中进行抽样,我们从基础密度中抽取了值
(面板(a)中的绿色和棕色箭头展示了两个示例)。然后,我们将这些值通过函数 (面板(b)中的虚线箭头展示)传递,生成了 的值,这些值在面板(c)中用箭头表示。
16.1.1 测量概率 - Measuring probability
测量数据点

图 16.2 分布转换。基础密度(青色,底部)通过一个函数(蓝色曲线,右上角)进行转换,生成模型密度(橙色,左侧)。将基础密度分为等间距区间(灰色垂直线)。在转换后,相邻区间之间的概率质量必须保持不变。青色阴影区域经过一个梯度大于一的函数部分,因此该区域被拉伸。为了保持与青色阴影区域相同的面积,橙色阴影区域的高度必须相应降低。而在其他位置(例如,
),梯度小于一,模型密度相对于基础密度增加。
更准确地说,根据转化后分布,数据
其中
16.1.2 正向映射和逆向映射 - Forward and inverse mappings
为了从分布中抽取样本,我们需要使用正向映射
正向映射有时被称为“生成方向”。通常选择标准正态分布作为基本密度。因此,逆向映射被称为“标准化方向”,因为它将复杂的分布转化为关于

图 16.3 逆向映射(标准化方向)。如果函数是可逆的,那么可以将模型密度转换回原始的基本密度。在模型密度下,点
的概率部分取决于基本密度下等价点 的概率(参见方程16.1)。
16.1.3 学习 - Learning
学习过程中,为了学习分布,我们寻找最大化训练数据
在第一行中,我们假设数据是独立同分布的,并在第三行中使用了方程16.1中的似然定义。
16.2 一般情况 - General case
上一节中,我们介绍了一个简单的一维示例,通过将一个简单的基础密度函数
考虑将一个函数
根据方程16.1的类比,样本在这个分布下的似然可以表示为:
其中
16.2.1 用神经网络来定义正向映射 - Forward mapping with a deep neural network
在实践中,我们通常使用神经网络来定义正向映射
逆向映射(归一化方向)由每个层的逆向操作
基础密度

图16.4 深度神经网络的正向和逆向映射。基本密度(左侧)通过网络层
逐渐变换,形成模型密度。每一层都是可逆的,我们也可以等价地认为层的逆映射将模型密度逐渐“流动”回基本密度。
前向映射的雅可比矩阵可以表示为:
其中,我们重载了符号,使得
反向映射的雅可比矩阵的绝对行列式可以通过对等式16.5应用相同的规则。它是前向映射中绝对行列式的倒数。
我们使用一个包含
其中
16.2.2 网络层的要求 - Desiderata for network layers
标准化流理论十分简单明了。但是,为了能够实际应用,我们需要满足以下四个条件的神经网络层
- 网络层的集合必须具备足够的表达能力,可以将多元标准正态分布映射为任意的概率密度函数。
- 网络层必须是可逆的;每一层必须定义了一个从输入点到输出点的唯一一对一映射(双射)。如果多个输入被映射到同一个输出,逆映射将不明确。
- 我们必须能够高效地计算每一层的逆映射。在评估似然函数时,我们需要每次都进行这个计算。在训练期间,这个计算会反复进行,所以必须有一个闭式解或者快速算法来计算逆映射。
- 还必须能够高效地计算正向或逆向映射的雅可比矩阵的行列式。
16.3 可逆网络层 - Invertible network layers
下面我们将介绍不同的可逆网络层或流,用于这些模型。我们首先从线性流和逐元素流开始。它们很容易进行反演,并且可以计算其雅可比矩阵的行列式,但是它们不能充分地表达基本密度的任意变换。然而,它们是耦合流、自回归流和剩余流的基本构成部分,这些流具有更强大的表达能力。
16.3.1 线性流 - Linear flows
线性流的形式为
如果矩阵
为了实现一个通用的、高效可逆并且雅可比矩阵计算效率高的线性流,一种直接使用LU分解来参数化的方法被提出。简单来说,我们使用以下公式:
其中
很遗憾,线性流动的表达能力不足。当将线性函数
16.3.2 逐元素流动 - Elementwise flows
由于线性流动的表达能力不足,我们必须转向非线性流动。其中最简单的是逐元素流动,它对输入的每个元素应用具有参数
雅可比矩阵
这个函数中,

图16.5 分段线性映射。将输入域
等分为 个大小相等的区域(这里 ),可以创建一个可逆的分段线性映射 。每个区域具有参数 控制斜率。
- a) 如果这些参数是正数并且总和为一,则
- b) 函数将是可逆的,并将输入域
映射到输出域 。
逐元素流是非线性的,但是不会混合输入维度,因此它们无法创建变量之间的相关性。当与混合维度的线性流(混合变换)交替使用时,可以建模更复杂的变换。然而,在实践中,逐元素流被用作更复杂层的组成部分,如耦合流。
16.3.3 耦合流 - Coupling flows
耦合流将输入
其中

图 16.6 耦合流。
- a)输入(橙色向量)被分为
和 两部分。输出(青色向量)的第一部分 是 的副本。通过将不可逆的变换 应用于 ,得到输出 ,其中参数 是 的一个(不一定可逆)函数。 - b)在逆映射中,
。这使我们能够计算参数 ,然后应用逆变换 来恢复 。
如果函数
逆向和雅可比矩阵可以高效地计算,但是这种方法只能将参数的后一半以依赖于前一半的方式进行转换。为了进行更一般的转换,可以通过使用排列矩阵对
16.3.4 自回归流 - Autoregressive flows
自回归流是耦合流的一种推广形式,它将每个输入维度视为单独的“块”(图16.7)。根据输入的前

图 16.7 自回归流。将输入
(橙色列)和输出 (青色列)分成它们各自的维度(这里是四个维度)。
- a)输出
是对输入 进行可逆变换得到的。输出 是对输入 进行可逆函数处理得到的,而函数的参数取决于 。输出 是对输入 进行可逆函数处理得到的,而参数取决于之前的输入 和 ,以此类推。这些输出之间相互独立,因此可以并行计算。 - b)与耦合流相似,自回归流的逆过程也是采用类似的方法计算得到的。然而,需要注意的是,为了计算
,我们必须已经知道 ;为了计算 ,我们必须已经知道 和 ,以此类推。因此,逆过程无法并行计算。
转换函数
^[1]^ 这与第12章讨论的转换器层无关。
可以通过使用适当的掩码网络以并行方式计算输出
反转转换的效率较低。考虑正向映射:
这必须按照与耦合流类似的原则顺序进行反转:
由于计算
16.3.5 逆自回归流 - Inverse autoregressive flows
掩码自回归流是在归一化(逆)方向上定义的。这是为了有效地计算似然函数并学习模型所必需的。然而,采样需要正向方向,即在每个层次上逐个计算每个变量,这样会很慢。如果我们在正向(生成)转换中使用自回归流,那么采样会很高效,但计算似然函数(和训练)会很慢。这就是所谓的“逆自回归流”。
一种允许快速学习和快速(但近似的)采样的技巧是构建一个掩码自回归流来学习分布(即老师),然后使用该分布来训练逆自回归流以进行高效的采样(即学生)。这种方法需要一种不同的归一化流的表达方式,即从另一个函数而不是一组样本中进行学习(详见第16.5.3节)。
16.3.6 残差流:iRevNet - Residual flows: iRevNet
残差流借鉴了残差网络的思想。它将输入分成两部分
其中

图16.8 残差流。 a) 可逆函数通过将输入分成
和 ,并创建两个剩余层进行计算。在第一个剩余层中,对 进行处理并与 相加。在第二个剩余层中,处理结果并与 相加。 b) 在反向机制中,函数按相反的顺序进行计算,并且加法运算变为减法。
对于耦合流,将输入分成块限制了可以表示的变换的种类。因此,需要在层之间对输入进行排列,以便变量可以以任意方式混合。
这个公式可以很容易地进行反转,但对于一般的函数
16.3.7 残差流与收缩映射:iResNet - Residual flows and contraction mappings: iResNet
利用残差网络的另一种方法是应用Banach不动点定理或收缩映射定理,该定理指出每个收缩映射都有一个不动点。收缩映射
其中
图 16.9 收缩映射。如果一个函数在每个点的斜率都小于一,不断迭代该函数会收敛到一个固定点
。
- a)从初始点
开始,我们计算出 。然后将 再次输入函数进行迭代。最终,这个过程会收敛到满足 的点(即函数与虚线对角线相交的位置)。 - b)这可以用于求解形如
的方程,通过观察到 的不动点(橙色线与虚线相交的位置)与 的解位置相同。
利用这个定理,我们可以反演具有以下形式的方程:
前提是
如果我们确保
雅可比行列式很难计算,但可以使用一系列技巧来近似计算其对数。
在第一行中,我们使用了等式
即使我们截断了这个级数,计算每个项的迹(
其中第一行成立是因为
通过这种方式,我们可以近似计算Taylor展开(方程16.22)的各项的迹,并评估对数概率。
16.4 多尺度流 - Multi-scale flows
在归一化流中,潜在空间

图 16.10 多尺度流。 在正常化流中,潜空间
的大小必须与模型密度相同。然而,它可以被分成几个组件,并逐渐引入到不同的层中。这样做可以加快密度估计和采样的速度。对于逆过程,黑色箭头反转,每个块的最后一部分都跳过剩余的处理。例如, 只对前三个块进行操作,第四个块成为 并与基础密度进行比较评估。
在生成方向上,多尺度流将潜在向量分为
16.5 应用 - Applications
我们现在介绍三个标准化流的应用。首先,我们考虑对概率密度进行建模。其次,我们介绍用于生成图像的 GLOW 模型。最后,我们讨论使用标准化流来近似其他分布。
16.5.1 密度建模 - Modeling densities
在本书中介绍的四种生成模型中,归一化流是唯一能够计算新样本精确对数似然的模型。生成对抗网络不是概率模型,而变分自编码器和扩散模型只能返回对似然的下界^[2]^。图16.11展示了使用i-ResNet在两个玩具问题中估计的概率分布。密度估计的一个应用是异常检测;使用归一化流模型来描述干净数据集的数据分布。概率较低的新样本被标记为异常值。然而,必须谨慎使用,因为可能存在概率较高的异常值,它们不属于典型集合(参见图8.13)。
^[2]^ 对于扩散模型,似然的下界实际上可以超过归一化流的精确计算,但数据生成速度要慢得多(请参见第18章)。
图 16.11 模拟密度。
- a)玩具 2D 数据样本。
- b)使用 iResNet 模型生成的密度。
- c-d)第二个例子。改编自 Behrmann et al. , 2019
16.5.2 合成 - Synthesis
生成流模型(Generative flows),即 GLOW,是一种能够生成高保真度图像(图 16.12)的归一化流模型,并借鉴了本章中的许多思想。它在归一化方向上最容易理解。GLOW从一个包含

图 16.12 GLOW 在 CelebA HQ 数据集(Karraset al.,2018)上训练的样本。这些样本的质量还算不错,但是相比起 GAN 和扩散模型,它们的效果稍逊一筹。改编自Kingma & Dhariwal,2018。
周期性地,我们将每个
为了生成更加真实的图像,GLOW模型通过提高基本密度的幂次来进行采样。这样选择的样本更接近密度中心,而不是尾部。这类似于GAN中的截断技巧(图15.10)。值得注意的是,与GAN或扩散模型相比,这些样本的质量没有那么好。目前还不清楚这是因为可逆层的基本限制,还是因为对此目标的研究工作较少。
图16.13展示了使用GLOW进行插值的示例。通过将两张真实图像在标准化方向上进行转换,计算出两个潜在向量。然后通过线性插值计算这两个潜在向量之间的中间点,并使用生成方向的网络将其投影回图像空间。结果是一组在两个真实图像之间实现逼真插值的图像集。

图 16.13 使用 GLOW 模型进行插值。左右两张图片是真实人物的照片。中间的图片是通过将真实图片投影到潜空间,进行插值,然后再将插值点投影回图像空间计算得到的。摘自 Kingma & Dhariwal , 2018.
16.5.3 近似其他密度模型 - Approximating other density models
归一化流模型还可以学习生成近似于已知密度的样本,这些密度易于评估但难以直接采样。在这种情况下,我们将归一化流称为“学生”,目标密度称为“老师”。
为了取得进展,我们从学生模型中生成样本

图16.14 密度模型的近似。
- a) 训练数据。
- b) 通常情况下,我们修改流模型的参数,通过最小化从训练数据到流模型的KL散度来拟合最大似然。这相当于使用正向KL散度中的交叉熵项(第5.7节)。
- c) 或者,我们可以修改流参数
,通过最小化从流样本 到 - d) 目标密度的KL散度来拟合最大似然。
这种方法与通常使用归一化流来构建一个概率模型
归一化流可以使用这个技巧来在VAE中对后验进行建模(见第17章)。
16.6 总结 - Summary
标准化流将一个基础分布(通常是正态分布)转变为一个新的概率密度函数。它们的优点是可以精确评估样本的概率,并生成新的样本。然而,它们的架构限制在于每一层都必须是可逆的;我们需要正向变换来生成样本,反向变换来评估概率。
在评估似然函数时,能够高效地估计雅可比矩阵非常重要;这需要反复进行以学习概率密度。然而,即使无法高效地估计雅可比矩阵,可逆层仍然具有自身的用处;它们将训练 K-层 网络所需的内存要求从
16.7 笔记 - Notes
流动归一化最初由Rezende & Mohamed,2015引入,但在Tabak & Vanden-Eijnden,2010,Tabak & Turner,2013和Rippel & Adams,2013的工作中已有相关的先例。有关流动归一化的综述可以在Kobyzev et al.,2020和Papamakarios et al.,2021中找到。Kobyzev et al.,2020对许多流动归一化方法进行了定量比较。他们的研究得出结论,Flow++模型(一种耦合流模型,具有新颖的逐元素转换和其他创新)在当时表现最佳。
可逆网络层: 可逆层可以减少反向传播算法的内存需求;在前向传播中,不再需要存储激活值,因为可以在反向传播中重新计算。除了本章讨论的常规网络层和残差层(Gomez et al. , 2017 ; Jacobsen et al. , 2018),还针对图神经网络(Li et al. , 2021a)、循环神经网络(MacKay et al. , 2018)、掩码卷积(Song et al. , 2019)、U-Net(Brügger et al. , 2019 ; Etmann et al. , 2020)和Transformer(Mangalam et al. , 2022)等领域开发了可逆层。
径向和平面流动: 最初的正常化流论文(Rezende&Mohamed,2015)采用了平面流动(沿着某些维度收缩或扩展分布)和径向流动(围绕某一点扩展或收缩)。这些流动的反函数不能轻易计算,但它们在近似分布的情况下很有用,特别是在抽样较慢或似然度只能评估到一个未知缩放因子的情况下(图16.14)。
应用: 这些应用包括图像生成、噪声建模、视频生成、音频生成、图形生成、图像分类、图像隐写术、超分辨率、风格迁移、动作风格转换、3D形状建模、压缩、sRGB到RAW图像转换、去噪、异常检测、图像到图像的转换、合成不同分子干预下的细胞显微镜图像以及光传输模拟。对于使用图像数据的应用,学习之前必须添加噪声,因为输入是量化的、离散的。
Rezende & Mohamed , 2015使用归一化流对VAEs中的后验进行建模。Abdalet al. , 2021使用归一化流来建模StyleGAN潜在空间中属性的分布,并利用这些分布来改变真实图像中指定的属性。Wolfet al. , 2021利用归一化流学习在给定清晰图像的噪声输入图像的条件下生成对应的图像,并模拟可用于训练去噪或超分辨率模型的噪声数据。
正规化流在物理学(Kanwar等,2020年;Köhler等,2020年;Noé等,2019年;Wirnsberger等,2020年;Wong等,2020年)中也有多种用途,在自然语言处理(Tran等,2019年;Ziegler和Rush,2019年;Zhou等,2019年;He等,2018年;Jin等,2019年)和强化学习(Schroecker等,2019年;Haarnoja等,2018a;Mazoure等,2020年;Ward等,2019年;Touati等,2020年)中也有应用。
线性流动: 对角线性流动可以代表归一化变换,如批量归一化和激活归一化。研究者们提出了不同的参数化方法,如三角矩阵和由Householder变换参数化的正交变换,以及LU参数化方法和QR分解方法。在深度学习中,卷积是一种常用的线性变换,但其逆和行列式计算并不直观。研究者们使用了
逐元素流和耦合函数: 逐元素流使用相同的函数(但对于每个变量使用不同的参数)独立地转换每个变量。相同的流可以用于构造耦合流和自回归流中的耦合函数,这种情况下它们的参数取决于前面的变量。为了可逆,这些函数必须是单调的。
添加耦合函数(Dinh et al. , 2015)只是在变量上加上一个偏移量。仿射耦合函数是对变量进行缩放和偏移的操作,其被Dinh et al. , 2015,Dinh et al. , 2016,Kingma & Dhariwal , 2018,Kingma et al. , 2016,以及Papamakarios et al. , 2017使用。Ziegler & Rush , 2019提出了非线性平方流,它是一个由五个参数构成的可逆多项式比率。连续混合CDF(Ho et al. , 2019)基于K个逻辑函数的累积分布函数(CDF),通过逻辑反函数、缩放和偏移进行单调转换。
分段线性耦合函数(图16.5)是由Müller等人,2019b开发的。随后,基于三次样条曲线(Durkan等人,2019a)和有理二次样条曲线(Durkan等人,2019b)的系统被提出。Huang等人,2018a引入了神经自回归流,其中函数由产生单调函数的神经网络表示。一个充分条件是权重都是正数且激活函数单调。由于满足权重为正的约束条件是困难的,因此出现了无约束单调神经网络(Wehenkel和Loupp e,2019),它们对严格正函数进行建模,然后通过数值积分得到单调函数。Jaini等人,2019根据一个经典结果构造了可以通过闭式积分得到的正函数,该结果表明所有正的单变量多项式都可以表示为多项式的平方和。最后,Dinh等人,2019研究了分段单调耦合函数。
耦合流:Dinh et al., 2015 提出了耦合流的概念,将维度分为两半(图16.6)。Dinh et al., 2016 引入了RealNVP,通过交替像素或通道块来分割图像输入。Das et al., 2019 根据导数的大小选择传播部分的特征。Dinh et al., 2016 将逐渐引入维度的多尺度流解释为耦合流,其中参数
自回归流: Kingma等,2016使用自回归模型进行标准化流。Germain等,2015开发了一种掩盖先前变量的通用方法。这一方法被Papamakarios等,2017应用于掩盖自回归流中同时计算所有输出的过程。Kingma等,2016引入了反向自回归流。Parallel WaveNet (Van den Oord等,2018)将WaveNet (Van denOord等,2016a),一种不同类型的音频生成模型,提炼成反向自回归流,以实现快速采样(参见图16.14c-d)。
剩余流: 剩余流是基于剩余网络(He等人,2016a)。RevNets和iRevNets将输入分成两个部分,每个部分都通过一个剩余网络(图16.8)。这些网络是可逆的,但是雅可比行列式的计算并不容易。剩余连接可以解释为普通微分方程的离散化,这种观点导致了不同的可逆架构。然而,这些网络的雅可比行列式仍然无法高效地计算。Behrmann等人指出,如果网络的利普希茨常数小于1,则可以使用不动点迭代将网络反演。这就引入了iResNet,其中雅可比行列式的对数行列式可以使用Hutchinson的迹估计器进行估计。Chen等人通过使用俄罗斯轮盘估计器消除了在方程中幂级数截断引起的偏差(16.22)。
**微小流动:**如果将残差网络视为普通微分方程(ODE)的离散化表示,那么下一步合乎逻辑的就是通过ODE直接表示变量的变化。神经ODE是由Chen et al., 2018e探索出来的,它利用了ODE中正向和反向传播的标准方法。不再需要雅可比矩阵来计算似然函数;而是通过一个不同的ODE来表示,其中对正向传播导数的迹与对数概率的变化相关联。Grathwohlet al., 2019使用Hutchinson估计器来估计这个迹,并进一步简化了计算过程。Finlay et al., 2020在损失函数中添加了正则化项,使训练更容易,而Dupont et al., 2019则通过增强表示能力,使神经ODE能够表示更广泛的微分同胚。Tzen & Raginsky, 2019和Peluchetti & Favaro, 2020则用随机微分方程替代了ODE。
普适性: 普适性属性指的是归一化流能够以任意准确的方式建模任何概率分布的能力。某些流(例如平面流、逐元素流)并不具备这个属性。当耦合函数是神经单调网络(Huang et al.,2018a)、基于单调多项式(Jaini et al.,2020)或基于样条曲线(Kobyzev et al.,2020)时,可以证明自回归流具有普适性属性。对于维度
其他研究工作: 正规化流领域的研究活动重点包括对离散流([Hoogeboom et al.,2019a](); [Tran et al.,2019]())、非欧几里得流([Gemici et al.,2016](); [Wang&Wang,2019]() )以及等变流([Köhler et al.,2020](); [Rezendeet al.,2019]())的研究,旨在创建对一类变换不变的密度。
16.8 问题 - Problems
问题 16.1 考虑使用函数
问题 16.2∗ 考虑将标准正态分布进行转换:
使用函数:
求转换后的分布
问题16.3 ∗ 根据方程
问题16.4 手动计算以下矩阵的逆矩阵和行列式:
问题16.5 考虑一个随机变量
问题16.6 证明如果
问题16.7 Leaky ReLU 定义如下:
请写出 leaky ReLU 的反函数表达式,以及对于多元变量
问题16.8 考虑将方程16.12中定义的分段线性函数
问题16.9∗ 考虑根据等间距箱体中平方根函数的锥形组合构建逐元素流:
其中
问题16.10 绘制图16.8中残差流的正向映射的雅可比矩阵结构,并标出其中为零的元素,分别考虑以下情况:(i)全连接神经网络,(ii)逐元素流。
问题16.11∗ 给出方程16.25中KL散度的表达式。为什么我们只需计算概率
[译]第17章 变分自编码器(VAE) - The variational autoencoder 《理解深度学习 - Understanding Deep Learning》

本文是基于Simon J.D. Prince 的新书《Understanding Deep Learning》翻译而来;
- 原书介绍、原书(英文)下载、译文进展 以及 译文内容请戳 ↓↓↓
- [译]《理解深度学习 - Understanding Deep Learning 》 - 目录&前言 - ATA (atatech.org)
↓↓↓ 以下正文↓↓↓
本章目录
- 本章目录
- 第17章 变分自编码器(VAE) - The variational autoencoder
- 17.1 潜变量模型 - Latent variable models
- 17.2 非线性潜变量模型 - Nonlinear latent variable model
- 17.3 训练 - Training
- 17.4 ELBO 概念 - ELBO properties
- 17.5 变分逼近 - Variational approximation
- 17.6 变分自编码器 - The variational autoencoder
- 17.7 重新参数化技巧 - The reparameterization trick
- 17.8 应用 - Applications
- 17.8 小结 - Summary
- 17.9 注释 - Notes
- 17.10 问题 - Problems
第17章 变分自编码器(VAE) - The variational autoencoder
生成对抗网络学习了一种可以生成与训练数据在统计上无法区分的样本的机制。与此不同的是,变分自编码器( VAE )和归一化流一样,是一种概率生成模型;它的目标是学习数据上的分布
通常我们会将 VAE 看作是
本章首先介绍了潜变量模型的一般性质,然后探讨了非线性潜变量模型的具体情况。很明显,对该模型进行最大似然学习并不简单。然而,可以定义一个似然下界, VAE 架构使用蒙特卡洛(采样)方法来近似这个下界。本章最后介绍了几个 VAE 的应用。
17.1 潜变量模型 - Latent variable models
潜变量模型采用了一种间接的方法来描述多维变量
通常,联合概率
这是一种相对间接的描述
17.1.1 例子:高斯混合模型 - Example: mixture of Gaussians
在一维高斯混合模型中(图 17.1a),潜变量

图 17.1 高斯混合模型(MoG)。
- a)混合高斯(MoG)将一个复杂的概率分布(青色曲线)表示为多个高斯分量(虚线曲线)的加权和。
- b)这个加权和是连续观测数据
和离散潜在变量 之间联合密度 的边缘化。
根据方程[17.2],似然函数
通过简单的似然函数和先验函数,我们描述了一个复杂的多模态概率分布。
17.2 非线性潜变量模型 - Nonlinear latent variable model
在非线性潜变量模型中,数据
似然函数
函数
通过对潜变量
我们可以将它视为具有不同均值的球形高斯分布的无限加权和(即无限混合),其中权重为

图17.2 非线性潜变量模型。通过对潜在变量
上的联合分布 (左图)进行边缘化,我们创建了一个复杂的二维密度 (右图);为了创建 ,我们对维度 上的三维体积进行积分。对于每个 , 上的分布是一个球形高斯分布(显示了两个切片),其均值 是 的非线性函数,并且依赖于参数 。分布 是这些高斯分布的加权和。
17.2.1 生成 - Generation
使用祖先采样(图17.3)可以生成新的示例

图17.3 非线性潜变量模型的生成过程。
- a) 我们从潜变量的先验概率
中抽取一个样本 。 - b) 然后从
中抽取样本 。这个分布是一个球形高斯分布,其均值是一个关于 的非线性函数 ,方差是固定的。 - c) 如果我们多次重复这个过程,最后我们可以得到密度
的分布。
17.3 训练 - Training
为了训练模型,我们通过最大化对于模型参数的对数似然函数在训练数据集
其中:
不幸的是,这个问题是无法解决的。对于积分没有闭合形式的表达式,是没有简便的方法来对特定的
17.3.1 证据下界(ELBO) - Evidence lower bound (ELBO)
为了取得进展,我们定义了一个对数似然的下界。对于给定的
17.3.2 Jensen不等式 - Jensen's inequality
Jensen不等式表明,对于数据
在本例中,凹函数是对数函数,所以我们有:
或者将期望的表达式完全展开,我们有:
这个问题在图17.4-17.5中有详细探讨。实际上,稍微更一般的陈述也是成立的:
其中
图 17.4 Jensen不等式(离散情况)。 对数函数(黑色曲线)是一个凹函数;你可以在曲线上的任意两点之间画一条直线,这条直线总是在曲线下方。因此,对数函数上的任何凸组合(权重和为1的正权重加权和)必须位于曲线下方的灰色区域中。在这里,我们将这些点均等加权(即取均值),得到青色点。由于这个点位于曲线下方,所以
。

图 17.5 Jensen不等式(连续情况)。对于一个凹函数,计算分布
的期望,并通过函数传递它的结果大于或等于通过函数转换变量 然后计算新变量的期望。以对数函数为例,我们有 。图的左侧对应于不等式的左侧,图的右侧对应于右侧。可以这样理解,我们将橙色分布中定义在 上的点看作是凸组合。根据图17.4的逻辑,这些点必然位于曲线下方。另一种思考方式是,凹函数相对于低值将 的高值进行压缩,因此当我们首先通过函数传递 时,期望值会较低。
17.3.3 推导下界 - Deriving the bound
我们现在使用Jensen不等式来推导对数似然的下界。首先,我们通过一个任意的概率分布
然后,我们使用对数的Jensen不等式(方程17.12)找到一个下界:
其中右侧被称为证据下界(ELBO)或ELBO。它得到这个名称是因为在贝叶斯公式的上下文中,
在实践中,分布
为了学习非线性潜变量模型,我们通过最大化这个量来确定
17.4 ELBO 概念 - ELBO properties
当我们第一次遇到ELBO时,它可能是一个有些神秘的概念,因此现在我们提供一些关于它性质的直觉理解。想象一下,原始数据的对数似然是参数

图 17.6 证据下界(ELBO)(ELBO)。 目标是最大化对参数
的对数似然 (黑色曲线)。ELBO是一个在对数似然下方的函数。它既与参数 有关,也与第二个参数集 有关。对于固定的 ,我们得到一个关于 的函数(不同 值的两个彩色曲线)。因此,我们可以通过改善ELBO来提高对数似然,要么是通过改变新的参数 (从橙色曲线到绿色曲线),要么是通过改变原始参数 (沿着当前的彩色曲线移动)。
17.4.1 界限的紧密度 - Tightness of bound
当对于某个固定的
在这里,第一个积分在第三行和第四行之间消失,因为
这个方程表明ELBO是原始对数似然减去KL散度

图17.7 潜在变量的后验分布。 a) 后验分布
是对潜在变量 负责的可能值的分布,可以解释数据点 。我们通过应用贝叶斯定理计算它 。 b) 我们通过将 与与每个 值相关的对称高斯分布相比较来计算右边的第一项(似然)。在这里,它更可能是由 而不是 生成的。第二项是潜变量的先验概率 。将这两个因素结合并进行标准化,使得分布总和为一,我们得到了后验分布 。
17.4.2 ELBO可以表示为重建损失减去与先验之间的KL距离 - ELBO as reconstruction loss minus KL distance to prior
方程17.16和17.17是表达ELBO的两种不同方式。第三种方式是将界限视为重建误差减去与先验之间的距离:
在第一行和第二行之间,联合分布
在这个公式中,第一项衡量潜变量和数据之间的平均一致性
17.5 变分逼近 - Variational approximation
在方程17.17中我们看到,当
但在实践中,这是不可行的,因为我们无法在分母中评估数据的似然性(见第17.3节)。
一种解决方法是进行变分近似:我们选择一个简单的参数形式

图17.8展示了变分近似的过程。后验
无法以闭合形式计算。为了近似后验分布,变分近似选择了一族分布 (这里选择高斯分布),并试图找到这族分布中与真实后验最接近的成员。
- a) 有时候,近似分布(青色曲线)能够很好地拟合真实后验分布(橙色曲线)。
- b) 然而,如果真实后验分布是多峰的(如图17.7所示),高斯近似将会表现不佳。
由于最优的
其中
17.6 变分自编码器 - The variational autoencoder
最后,我们来介绍一下变分自编码器( VAE )。我们构建了一个网络来计算ELBO(证据下界(ELBO)):
其中,分布
第一项仍然包含一个难以解决的积分,但由于它是关于
其中
第二项是变分分布
其中
17.6.1 变分自编码器( VAE )算法 - VAE algorithm
简而言之,我们的目标是构建一个模型,计算给定数据点
- 使用网络
来计算变分后验分布 的均值 和方差 ,对于给定的数据点 - 从该分布中抽取一个样本
- 使用指定的方程式17.23计算证据下界(ELBO)
图17.9展示了相关的架构。现在应该明白为什么它被称为变分自编码器了。它之所以称为变分自编码器,是因为它对后验分布进行了高斯近似计算。它也被称为自编码器,是因为它从数据点

图 17.9 变分自编码器。编码器
接受一个训练示例 并预测变分分布 的参数 。我们从该分布中进行采样,然后使用解码器 预测数据 。损失函数是负 ELBO,取决于预测的准确性以及变分分布 与先验分布 的相似程度(方程 17.21 )。
VAE 使用

图17.10 VAE 通过调整解码器的参数
和编码器的参数 来增加下界,从而更新每次迭代时决定下界的两个因素。
17.7 重新参数化技巧 - The reparameterization trick
还有一个更为复杂的问题;网络中涉及到一个采样步骤,对这个随机组件进行微分是困难的。然而,为了更新网络中在其之前的参数
幸运的是,我们有一个简单的解决方法;我们可以将随机部分转移到网络的一个分支中,从
从所需的高斯分布中抽取。现在,我们可以像往常一样计算导数,因为反向传播算法不需要通过随机分支。这被称为 重新参数化技巧 (图 17.11 )。

图 17.11 重参数化技巧。在原始架构(图 17.9)中,我们无法轻松地通过采样步骤进行反向传播。通过重参数化技巧,我们将采样步骤从主要流程中分离出来;我们从标准正态分布中抽取样本,并将其与预测的均值和协方差相结合,从而获得来自变分分布的样本。
17.8 应用 - Applications
变分自编码器在许多方面都有用途,包括去噪、异常检测和压缩。本节将介绍几个用于图像数据的应用案例。
17.8.1 近似样本概率 - Approximating sample probability
在17.3节中,我们已经讨论过使用 VAE 评估样本概率的不可能性。这个概率可以描述为:
原则上,我们可以使用等式17.22通过从
然而,维度诅咒意味着我们抽样得到的
现在我们从
我们试图计算的
通过这种方法,我们可以近似计算新样本的概率。通过足够的样本,这将提供比下界更好的估计,并可以通过评估测试数据的对数似然来评估模型的质量。或者,它可以用作确定新样本是否属于分布中还是异常值的判据。
17.8.2 生成 - Generation
VAE 构建了一个概率模型,通过从潜变量的先验
现代的变分自编码器( VAE )通过使用分层先验、专门的网络架构和正则化技术,可以生成高质量的样本(图17.12d)。扩散模型(第18章)可以看作是具有分层先验的 VAE 。这些模型同样可以生成非常高质量的样本。

图17.12 在CELEBA数据集上训练的标准 VAE 进行采样。每一列中,先绘制一个潜变量
,然后通过模型预测均值 ,最后添加独立的高斯噪声(参见图17.3)。
- a)是一组样本,它们是 预测的均值(b) 和 球形高斯噪声向量(c) 的叠加。在添加噪声之前,图像看起来过于平滑,之后则过于嘈杂。这是典型情况,通常显示去噪版本,因为噪声被认为代表了模型未能建模的图像特征。改编自Dorta等人,2018。
- d) 现在,利用分层先验、特殊的架构和仔细的规范化,可以从 VAEs 生成高质量的图像。改编自Vahdat & Kautz , 2020。
17.8.3 重新组合 - Resynthesis
VAE s还可以用于修改真实数据。可以通过两种方式将数据点
- (i) 使用编码器预测的分布的均值
- (ii) 使用最大化后验概率的优化过程来找到潜在变量
根据贝叶斯定理,后验概率与
在图17.13中,我们将多张标记为“中性”或“微笑”的图像投影到潜在空间中。通过计算这两组图像的潜在空间均值之间的差异来估计代表这种变化的向量。同时,我们还估计了另一个向量来表示“嘴巴闭合”与“嘴巴张开”。

图17.13 重合合成。 使用编码器将左侧的原始图像投影到潜在空间中,并选择预测的高斯分布的均值来表示该图像。在网格中,左侧中间的图像是输入图像的重建结果。其他图像是在潜在空间中按照表示微笑/中性(水平方向)和嘴巴张开/闭合(垂直方向)的方向进行操作后的重建结果。改编自White, 2016。
现在,我们将对感兴趣的图像进行投影,然后通过添加或减去这些向量来调整图像的表达。为了生成中间图像,我们使用球形线性插值(Slerp)而不是线性插值。可以将这个过程类比为在球体表面上插值和直接穿过球体内部挖掘隧道之间的区别。
在对输入数据进行解码之前,对数据进行编码(可能还会进行修改)的过程被称为重新合成。GANs和归一化流也可以用来实现这个过程。然而,在GANs中,没有编码器,所以必须使用单独的方法来找到对应于观察数据的潜在变量。
17.8.4 解缠绑 - Disentanglement
在上面的重构示例中,需要使用带有标签的训练数据来估计表示可解释属性的空间方向。其他研究试图改进潜在空间的特性,使其坐标方向对应于真实世界的属性。当每个维度都代表一个独立的真实世界因素时,我们将潜在空间描述为“解缠绑”。例如,在对面部图像进行建模时,我们可能希望将头部姿势或头发颜色作为独立的因素来揭示。
鼓励解缠的方法通常通过在损失函数中添加正则化项来实现,这些正则化项基于两种情况:(i) 潜变量后验概率
在这里,正则化项
例如,beta VAE 在 ELBO(方程[17.18])中增加了第二项权重:
其中

图17.14 总相关 VAE 中的解缠绕。 VAE 模型被修改,以鼓励最小化潜在变量的总相关性,从而促进解缠绕。当在椅子图像的数据集上进行训练时,一些潜在维度具有明确的现实世界解释,包括
- a)旋转,
- b)整体尺寸,以及
- c)腿(转椅与普通椅子)。在每种情况下,中央列显示了模型的样本,当我们从左到右在潜在空间中减去或添加一个坐标向量。改编自Chen et al. ,2018d。
17.8 小结 - Summary
VAE 是一种有助于学习非线性潜变量模型的架构,可在
无法通过闭式计算来确定数据点的可能性,这给最大似然训练带来了问题。但是,我们可以定义可能性的一个下界,并最大化这个下界。不幸的是,为了使下界更紧密,我们需要计算给定观测数据的潜变量的后验概率,这也是不可行的。解决方案是使用变分近似。这是一个更简单的分布(通常是高斯分布),它近似于后验分布,并由第二个编码器网络计算其参数。
为了从 VAE 中生成高质量的样本,似乎需要使用比高斯先验和后验更复杂的概率分布来建模潜在空间。一种选择是使用层次先验(其中一个潜变量生成另一个)。下一章将讨论扩散模型,它可以产生非常高质量的例子,并可看作是层次 VAE 。
17.9 注释 - Notes
VAE 最初由Kingma & Welling,2014引入。关于变分自编码器的详细介绍可以在Kingma等,2019中找到。
应用: VAE 及其变种已应用于图像(Kingma & Welling,2014;Gregor等,2016;Gulrajani等,2016;Akuzawa等,2018),语音(Hsu等,2017b),文本(Bowman等,2015;Hu等,2017;\mathbf xu等,2020),分子(Gómez-Bombarelli等,2018;Sultan等,2018),图形(Kipf&Welling,2016;Simonovsky&Komodakis,2018),机器人(Hernández等,2018;Inoue等,2018;Park等,2018),强化学习(Heess等,2015;Van Hoof等,2016),3D场景(Eslami等,2016,2018;Rezende Jimenez等,2016)和手写(Chung等,2015)。
应用包括重新合成和插值,协同过滤和压缩。利用 VAE 构建了化学结构的连续表示,然后可以对其进行优化以获得理想的性质。模拟天文观测以校准测量结果。
与其他模型的关系: 自编码器(Rumelhart等,1985;Hinton和Salakhutdinov,2006)通过编码器将数据传递到瓶颈层,然后使用解码器进行重构。瓶颈层与 VAE 中的潜在变量类似,但其动机有所不同。在这里,目标不是学习概率分布,而是创建一个能够捕捉数据本质的低维表示。自编码器还有许多应用,包括去噪(Vincent等,2008)和异常检测(Zong等,2018)。
如果编码器和解码器是线性变换,那么自动编码器就等同于主成分分析(PCA)。因此,非线性自动编码器是PCA的一种推广。还有一种概率形式的PCA。概率PCA(Tipping&Bishop,1999年)在重构过程中加入球形高斯噪声,以创建一个概率模型,而因子分析则加入对角高斯噪声(参见Rubin&Thayer,1982年)。如果我们将这些概率变体的编码器和解码器设为非线性,就得到了变分自动编码器。
架构变体: 条件 VAE (Sohn等人,2015)在编码器和解码器中都传递了类别信息
修改似然性:其他研究探索了更复杂的似然模型
潜变量空间、先验和后验: 人们研究了许多不同形式的变分近似方法来逼近后验分布,包括归一化流(Rezende & Mohamed, 2015;Kingma et al., 2016)、有向图模型(Maaløe et al., 2016)、无向模型(Vahdat et al., 2020)以及递归模型用于时序数据(Gregor et al., 2016, 2019)。
其他研究者探索了使用离散潜变量空间的方法(Van Den Oord et al., 2017;Razavi et al., 2019b;Rolfe, 2017;Vahdat et al., 2018a, b。例如,Razavi et al., 2019b 使用了矢量量化的潜变量空间,并用自回归模型(方程式12.15)来建模先验分布。尽管从中抽样速度较慢,但可以描述非常复杂的分布。
Jiang等,2016使用高斯混合模型进行后验推断,实现了聚类分析。这种层次潜变量模型在后验中引入了一个离散的潜变量,以增加其灵活性。其他作者(Salimans等,2015; Ranganath等,2016; Maaløe等,2016; Vahdat和Kautz,2020)尝试使用连续变量的层次模型。这些模型与扩散模型(第18章)有密切的关联。
与其他模型的组合: Gulrajani等,2016将 VAE 与自回归模型结合,以生成更逼真的图像。Chung等,2015将 VAE 与循环神经网络结合,对时变测量进行建模。
正如上面所讨论的那样,对抗性损失已经被用来直接确定似然项。然而,其他模型以不同的方式将生成对抗网络(GANs)的思想与变分自编码器( VAE s)相结合。Makhzani et al. ,2015 在潜在空间中使用对抗性损失;其思想是鉴别器将确保聚合的后验分布
后验坍塌: 训练中的一个潜在问题是后验坍塌,即编码器总是预测先验分布。这个问题在Bowman等人,2015年的研究中被发现,并且可以通过逐渐增加鼓励后验分布和先验分布之间KL距离变小的项来缓解。已经提出了几种其他方法来防止后验坍塌(Razavi等人,2019a; Lucas等人,2019b, a),而且这也是使用离散潜在空间的动机之一(Van Den Oord等人,2017)。
模糊的重建: Zhao et al. , 2017c 提供了证据表明,模糊的重建部分是由于高斯噪声,也是由于变分逼近引起的次优后验分布。也许并非巧合的是,一些最佳的合成结果来自于使用复杂的自回归模型建模的离散潜在空间(Razavi et al. , 2019b),或者来自于使用分层潜在空间(Vahdat &Kautz , 2020;见图17.12d)。图17.12a-c使用的是在CELEBA数据库上训练的 VAE (Liu et al. , 2015)。图17.12d使用的是在CELEBA HQ数据集上训练的分层 VAE (Karras et al. , 2018)。
其他问题:Chen et al. , 2017指出,当使用更复杂的似然项时,例如PixelCNN(Van den Oord et al. , 2016c),输出可能完全不依赖于潜变量。他们称之为“信息偏好”问题。Zhao et al. , 2017b在Info VAE 中解决了这个问题,他们增加了一个额外的项,最大化了潜变量与观测分布之间的互信息。
另一个问题是 VAE 中可能存在与任何现实样本都不相对应的“孔洞”。\mathbf xu et al. , 2020引入了约束后验 VAE ,通过添加正则化项来防止潜空间中出现这些虚无的区域。这样可以实现更好的真实样本插值。
**解开潜在表示:**解开潜在表示的方法包括beta VAE (Higgins等人,2017)以及其他方法(如Kim和Mnih,2018;Kumar等人,2018)。Chen等人(2018)进一步将ELBO分解,揭示了衡量潜在变量之间总相关性的项的存在(即聚合后验和其边缘乘积之间的距离)。他们以此为基础提出了总相关性 VAE ,试图将其最小化。Factor VAE (Kim和Mnih,2018)采用了不同的方法来最小化总相关性。Mathieu等人(2019)讨论了在解开表示中的重要因素。
**重新参数化技巧:**考虑计算某个函数的期望值,其中期望值所采用的概率分布取决于某些参数。重新参数化技巧计算了这个期望值关于这些参数的导数。本章介绍了这个方法作为通过对期望的采样过程进行微分的一种方法;还有其他方法(见问题17.5),但重新参数化技巧提供了一个(通常)方差较低的估计器。这个问题在Rezende等人,2014,Kingma等人,2015和Roeder等人,2017中进行了讨论。
下界与EM算法: VAE 的训练基于优化证据的下界(有时也称为ELBO、变分下界或负变分自由能)。Hoffman & Johnson,2016和Lücke et al.,2020以多种方式重新解释了这个下界,以阐明其性质。其他研究工作旨在使这个下界更加紧密(Burda et al.,2016;Li & Turner,2016;Bornschein et al.,2016;Masraniet al.,2019)。例如,Burda et al.,2016使用了一种修改后的下界,该下界基于使用近似后验的多个重要性加权样本来构建目标函数。
当分布

图 17.15 期望最大化(EM)算法。EM算法交替调整辅助参数
(在彩色曲线之间移动)和模型参数 (沿着彩色曲线移动),直到达到极大值。这些调整分别称为E步和M步。由于E步使用后验分布 用于 ,因此界限很紧,每次E步之后,彩色曲线都会触碰到黑色似然曲线。
17.10 问题 - Problems
问题 17.1 创建一个一维高斯混合模型,需要多少个参数?每个参数可能取值的范围是什么?
问题 17.2 如果一个函数的二阶导数在任意点都小于或等于零,则该函数是凹函数。证明对于函数
问题 17.3 对于凸函数而言,Jensen不等式的方向是相反的。
如果一个函数的二阶导数在任何地方都大于或等于零,则该函数是凸函数。证明对于任意
问题 17.4∗ 证明 ELBO,如方程 17.18 所示,可以通过变分分布
首先使用贝叶斯定理 (方程 17.19 )。
问题 17.5 重参数化技巧用于计算函数
其中
这种方法被称为REINFORCE算法或得分函数估计器。
问题17.6 在潜在空间中移动时,为什么使用球面线性插值比普通线性插值更好?提示:考虑图8.13。
问题17.7 推导具有
[译]第18章 扩散模型 - Diffusion model 《理解深度学习 - Understanding Deep Learning》

本文是基于Simon J.D. Prince 的新书《Understanding Deep Learning》翻译而来;
- 原书介绍、原书(英文)下载、译文进展 以及 译文内容请戳 ↓↓↓
- [译]《理解深度学习 - Understanding Deep Learning 》 - 目录&前言 - ATA (atatech.org)
↓↓↓ 以下正文↓↓↓
第18章 扩散模型 - Diffusion model
第15章讲述了生成对抗模型,它们可以生成看起来合理的样本,但并不能明确定义数据的概率分布。第16章讨论了归一化流模型。这些模型可以明确定义数据的概率分布,但需要对网络进行一些结构上的限制;每一层都必须可逆,而且雅可比行列式的计算必须容易。第17章介绍了变分自编码器,它们也有坚实的概率基础,但计算似然函数是困难的,需要通过一个下界来近似。
本章介绍了扩散模型。与标准化流模型类似,扩散模型是一种将潜在变量与观测数据之间定义为非线性映射的概率模型,两者具有相同的维度。与变分自编码器类似,它们使用基于编码器的下界来近似数据的似然性,该编码器将数据映射到潜在变量。然而,在扩散模型中,编码器是预先确定的;目标是学习一个与该过程相反的解码器,用于生成样本。扩散模型易于训练,并且能够生成比GAN生成的样本更逼真的高质量样本。在阅读本章之前,读者应该熟悉变分自编码器(第17章)。
18.1 概览 - Overview
扩散模型由一个编码器和一个解码器组成。编码器接收一个数据样本
编码器是预先指定的;它逐渐将输入与白噪声样本混合在一起(图18.1)。经过足够的步骤,最终潜在变量的条件分布

图 18.1 扩散模型。
- 编码器(正向,或扩散过程)将输入
通过一系列潜在变量 映射。这个过程是预先指定的,并逐渐将数据与噪声混合,直到只剩下噪声。 - 解码器(反向过程)是通过学习得到的,并将数据通过潜在变量传递回去,每个阶段去除噪声。训练后,通过对噪声向量
进行采样,并通过解码器传递它们来生成新的示例。
在解码器中,我们训练了一系列网络来进行相邻的潜变量
在第18.2节中,我们详细讨论了编码器。尽管它的属性并不明显,但对于学习算法来说至关重要。在第18.3节中,我们讨论了解码器。第18.4节推导出了训练算法,并在第18.5节中重新表述以使其更加实用。第18.6节讨论了实现细节,包括如何根据文本提示进行生成。
18.2 编码器(正向过程) - Encoder (forward process)
扩散 或 正向 过程^[1]^(图 18.2 )将数据样本
^[1]^注意,这与归一化流的命名方式相反,其中逆映射从数据到潜在变量,正向映射再次返回。
其中
这是一个马尔可夫链,因为概率
^[2]^ 我们使用
而不是 ,以匹配前一章节中VAE编码器描述的符号表示法。
对于给定的输入

图 18.2 正向过程。
18.2.1 扩散核 - Diffusion kernel
为了训练解码器以反转这个过程,我们使用多个样本
将第一个方程代入第二个方程,我们得到:
最后两项是从均值为零、方差分别为
其中
如果我们将这个方程代入
其中
对于任意起始数据点

图 18.3 扩散核。
- a) 点
通过方程18.1传播到潜变量上(灰色表示五条路径)。扩散核 是给定从 出发的变量 的概率分布。它可以通过闭合形式计算,并且是一个均值趋向于零,方差随 增加而增加的正态分布。热图显示了每个变量的 。青色线表示均值加减 个标准差。 - b) 在实践中,扩散核
在 时显示出来。实际上,扩散核允许我们在不计算中间变量 的情况下,对应于给定 的样本潜变量 。当 变得非常大时,扩散核变成一个标准正态分布。
18.2.2 边际分布 - Marginal distributions
边际分布
其中方程18.3中定义了
然而,由于我们现在有了“跳过”中间变量的扩散核
因此,如果我们反复从数据分布

图18.4 边际分布。
- a)给定初始密度
(顶部行),扩散过程会逐渐使分布变模糊,并通过潜在变量 将其转变为标准正态分布。每个后续的热力图水平线代表一个边际分布 。 - b)顶部图表展示了初始分布
。其他两个图表展示了边际分布 和 。
18.2.3 条件分布 - Conditional distribution
我们将条件概率
为了逆转这个过程,我们应用贝叶斯定理:
由于无法计算边缘分布
对于这个简单的一维例子,可以通过数值方法来计算

图 18.5 条件分布
。
- a)边际密度
,突出显示了三个点 。 - b)概率
(青色曲线)通过贝叶斯定理计算,与 成正比。一般来说,它不服从正态分布(上图),尽管通常正态分布是一个很好的近似(下面两个图)。第一个似然项 在 上是正态分布(方程18.2),其均值略微偏离零点,并且比 (棕色曲线)较远。第二个项是边缘密度 (灰色曲线)。
18.2.4 条件扩展分布 - Conditional diffusion distribution
在考虑编码器相关的最后一个分布。我们注意到,我们无法找到条件分布
因此,我们可以通过计算得到条件扩散分布
在第一二步之间,我们利用了扩散过程是马尔可夫过程的事实,即
在第三行和第四行之间,我们使用了高斯变量改变的公式,将第一个分布重新表示为
这样得到的结果是:
请注意,方程[18.12, 18.13]和[18.14]中的比例常数必须相互抵消,因为最终结果已经是正确的归一化概率分布。
18.3 解码器(逆向过程) - Decoder model (reverse process)
当我们学习扩散模型时,我们实际上学习的是逆向过程。也就是说,我们学习了一系列从潜变量
其中

图 18.6 条件分布
的示意图。
- a) 在
的情况下,有三个点 被突出显示的扩散核。 - b) 通过贝叶斯法则计算概率
,该概率与 成正比。这个概率是正态分布的,可以通过闭式计算得到。第一个似然项 在 上是正态分布的(式 18.2 ),其均值比 稍微远离零点(棕色曲线)。第二个项是扩散核 (灰色曲线)。
18.4 训练 - Training
观测变量
通过对潜在变量进行边缘化,可以得出观测数据的似然
为了训练模型,我们针对参数
由于方程18.18中的边缘化计算是难以处理的,因此我们使用Jensen不等式来定义似然的下界,并且与VAE(参见第17.3.1节)相同,针对这个下界优化参数
18.4.1 证据下界(ELBO) - Evidence lower bound (ELBO)
为了得到下界,我们将对数似然乘以编码器分布
这给我们带来了证据下界(ELBO):
在VAE中,编码器
18.4.2 简化ELBO - Simplifying the ELBO
现在,我们将ELBO中的对数项进行简化,得到最终会进行优化的形式。首先,我们分别使用方程[18.17]和[18.3]中的定义替换分子和分母:
然后我们展开第二项的分母:
其中第一个等式成立是因为变量
在第二行和第三行之间,比值乘积中的所有项都相互抵消,只剩下
简化后的 ELBO 如下:
在第二行和第三行之间,我们对
18.4.3 分析ELBO - Analyzing the ELBO
ELBO中的第一个概率项在方程18.16中被定义为:
它相当于VAE中的重构项。如果模型的预测与观察数据匹配,ELBO的值将更大。对于VAE,我们将使用蒙特卡洛估计(见方程17.22-17.23)来近似对这个量的对数期望,其中我们使用从
ELBO中的KL散度项衡量了先前时刻的潜变量
两个正态分布之间的KL散度有一个闭式表达式。此外,该表达式中的许多项不依赖于参数
18.4.4 扩散损失函数 - Diffusion loss function
为了拟合模型,我们最大化对参数
其中
18.4.5 训练过程 - Training procedure
这个损失函数可用于为每个扩散时间步训练网络。它的目标是使前一时间步的隐藏变量估计
图18.7和18.8展示了简单的1D示例的拟合逆过程。该模型的训练步骤如下:(i) 从原始密度中获取大量示例
图 18.7 拟合模型。

图 18.8 拟合模型的结果。 青色和棕色曲线分别对应图18.4和图18.7的顶部行所示的原始和估计密度。垂直条是从模型中生成的分箱样本,通过从
进行采样,并通过变量 向前传播生成,如图18.7中的五条路径所示。
18.5 损失函数的参数化 - Reparameterization of loss function
虽然可以使用方程[18.29]中的损失函数,但是在不同的参数化下发现扩散模型效果更好;修改了损失函数,使得模型的目标是预测当前变量中与原始数据示例混合的噪声。第18.5.1节讨论了目标的参数化(方程[18.29]第二行的前两个术语),第18.5.2节讨论了网络的参数化(方程[18.29]第二行的最后一个术语)。
18.5.1 目标的参数化 - Reparameterization of target
原始的扩散更新公式如下:
根据方程18.28,数据项
将这个代入方程18.29的目标项中,可以得到:
其中在第二行和第三行之间用到了
其中在第二行和第三行之间将第一项的分子和分母都乘以了
将其代入损失函数(方程18.29)中,我们有:
18.5.2 网络的重参数化 - Reparameterization of network
现在我们用一个新模型
将新模型代入方程18.34得到的准则是:
对数正态分布可以写成最小二乘损失加上常数
将
将此项加到最终的损失函数中:
我们忽略了加法常数
在实践中,忽略了缩放因子(在每个时间步可能不同),得到了一个更简单的公式:
在第二行中,我们使用了扩散核(方程18.30)来重新表示
18.6 实现 - Implementation
这导致了训练模型(算法18.1)和抽样(算法18.2)的简单算法。训练算法的优点是它既易于实现,又能自然地增加数据集;在每个时间步骤中,我们可以使用不同的噪声实例化

18.6.1 图像应用 - Application to images
扩散模型在建模图像数据方面非常成功。在这里,我们需要构建能够接收带有噪声的图像并预测每个步骤中添加的噪声的模型。对于这种图像到图像的映射,最明显的架构选择是UNet(第11.10节)。然而,可能会有非常多的扩散步骤,训练和存储多个U-Net是低效的。解决方案是训练一个单独的U-Net,该U-Net还接收表示时间步骤的预定向量作为输入(图18.9)。实际上,这个向量被调整大小以匹配U-Net每个阶段的通道数,并用于在每个空间位置上调整和/或缩放表示。

图 18.9 在图像扩散模型中使用的 U-Net。该网络旨在预测添加到图像中的噪声。它由一个编码器和一个解码器组成。编码器通过减小尺度和增加通道数来处理输入,而解码器通过增加尺度和减少通道数来恢复输出。编码器的表示与解码器的相应表示级联连接起来。相邻表示之间的连接包括残差块,并且周期性全局自注意力机制使得每个空间位置都与其他空间位置相互作用。同一个网络在所有时间步骤中都被使用,通过将正弦时间嵌入(图 12.5)通过一个浅层神经网络,并将结果添加到 U-Net 的每个空间位置的通道中。
为了使条件概率
18.6.2 改善生成速度 - Improving generation speed
损失函数(公式[18.39])要求扩散核函数具有形式

图18.10 与相同模型兼容的不同扩散过程。
- a)在地面真实边缘分布上叠加了重新参数化模型的五条采样轨迹。顶部行代表
,随后的行代表 。 - b)从重新参数化模型生成的样本直方图与地面真实密度曲线
绘制在一起。同一个训练模型适用于一系列扩散模型(和相应的相反方向的更新),包括去噪扩散隐式(DDIM)模型,该模型是确定性的,在每个步骤中不添加噪声。 - c)DDIM模型的五条轨迹。
- d)DDIM模型的样本直方图。同一个模型也适用于加速扩散模型,该模型跳过推断步骤以增加采样速度。
- e)加速模型的五条轨迹。
- f)加速模型的样本直方图。
在这个家族中,有一种叫做"去噪扩散隐式模型"的模型,在第一步从
18.6.3 条件生成 - Conditional generation
如果数据附带有标签
新的项取决于基于潜变量
无分类器引导 是一种避免学习单独分类器
18.6.4 改善生成质量 - Improving generation quality
就像其他生成模型一样,通过在基本模型上应用一些技巧和扩展可以获得最高质量的结果。首先,已经注意到估计反向过程的方差
第三,为了生成高分辨率图像,使用了一系列的扩散模型。首先创建一个低分辨率图像(可能由类信息引导)。随后的扩散模型逐步生成更高分辨率的图像。它们根据低分辨率图像的大小进行条件控制,将其调整大小并添加到组成U-Net的层中,同时还可以使用其他类信息(图18.11)。

图18.11 基于文本提示的级联条件生成。
- a)使用一系列U-Net生成64×64的图像。
- b)这个生成过程以语言模型计算的句子嵌入为条件。
- c)生成了更高分辨率的256×256图像,并以较小图像和文本编码为条件。
- d)重复该过程以创建1024×1024的图像。
- e)最终的图像序列。改编自Saharia et al. , 2022b。
通过结合所有这些技术,可以生成非常高质量的图像。图18.12展示了基于ImageNet类别条件的模型生成的图像示例。令人印象深刻的是,同一模型能够学习生成如此多样的类别。图18.13展示了从一个模型生成的图像,该模型经过训练能够根据由类似BERT的语言模型编码的文本标题进行条件建模,这些标题以与时间步骤相同的方式插入到模型中(参见图18.9和18.11)。这样可以生成与标题相符的非常逼真的图像。由于扩散模型的本质是随机的,因此可以生成多个基于相同标题的图像。

图 18.12 使用分类器引导的条件生成。根据不同的 ImageNet 类别作为条件生成的图像样本。同一个模型可以生成高质量的各种不同类别的图像样本。改编自Dhariwal & Nichol, 2021。

图 18.13 使用文本提示的条件生成。通过一个级联生成框架,根据由大型语言模型编码的文本提示作为条件生成的合成图像。这个随机模型可以生成许多与提示相匹配的不同图像。该模型可以计算物体数量并将文本融入图像中。改编自Saharia 等人,2022b。
18.7 总结 - Summary
扩散模型通过多次融合当前表示和随机噪声,将数据示例映射到一系列潜在变量上。经过足够多的步骤后,表示将变得与白噪声无法区分。由于这些步骤很小,每个步骤的反向去噪过程可以用正态分布来近似,并由深度学习模型进行预测。损失函数基于证据下界(ELBO),最终导致一个简单的最小二乘公式。
在图像生成中,每个去噪步骤都使用 U-Net 实现,因此与其他生成模型相比,采样速度较慢。为了提高生成速度,可以将扩散模型改为确定性公式,并且在这种情况下,采样较少的步骤也能得到良好的效果。已经提出了几种方法来将生成与类别信息、图像和文本信息相结合,这些方法产生了令人印象深刻的文本到图像的合成结果。
18.8 笔记 - Notes
去噪扩散模型是由Sohl-Dickstein et al., 2015引入的,而基于分数匹配的早期相关工作是由Song&Ermon, 2019进行的。Ho et al., 2020生成的图像样本与GAN相媲美,并引发了对这一领域的浓厚兴趣。本章中的大部分内容,包括原始公式和重新参数化,都是基于这篇论文推导出来的。Dhariwal&Nichol, 2021改善了这些结果的质量,并首次证明了扩散模型的图像在Frechet Inception Distance方面比GAN模型更好。截至撰写本文时,有关条件图像合成的最先进成果是由Karras et al., 2022实现的。关于去噪扩散模型的调查可在Croitoru et al., 2022,Cao et al., 2022,Luo, 2022和Yang et al., 2022中找到。
图像应用: 扩散模型的应用包括文本转图像生成(Nichol等,2022;Ramesh等,2022;Saharia等,2022b),图像转图像的任务,如上色、修复、裁剪还原(Saharia等,2022a),超分辨率(Saharia等,2022c),图像编辑(Hertz等,2022;Meng等,2021),去除对抗性干扰(Nie等,2022),语义分割(Baranchuk等,2022)和医学影像(Song等,2021b;Chung&Ye等,2022;Chung等,2022;Peng等,2022;xie&Li,2022;Luo等,2022),有时扩散模型被用作先验。
不同的数据类型: 扩散模型也被应用于视频数据([Ho等,2022b];[Harvey等,2022];[Yang等,2022];[Höppe等,2022];[Voleti等,2022])用于生成、预测过去和未来帧以及插值。它们还被用于3D形状生成([Zhou等,2021];[Luo&Hu,2021]),最近还引入了一种仅使用2D文本到图像扩散模型生成3D模型的技术([Poole等,2023])。[Austin等,2021]和[Hoogeboom等,2021]研究了离散数据的扩散模型。[Kong等,2021]和[Chen等,2021d]将扩散模型应用于音频数据。
去噪的替代方法: 本章中的扩散模型将噪声与数据混合,并构建一个模型逐渐去除噪声。然而,并非必须使用噪声来降低图像质量。Rissanen等人,2022年提出了一种逐渐模糊图像的方法,Bansal等人,2022证明了相同的思想在一大类不必是随机的图像降级方法中同样适用,包括遮蔽、变形、模糊和像素化等方法。
与其他生成模型的比较: 扩散模型比其他生成模型合成的图像质量更高,并且训练起来更简单。可以将它们看作是分层VAE的一种特殊情况(Vahdat&Kautz,2020;Sønderby等,2016b),其中编码器是固定的,潜在空间的大小与数据相同。它们是概率性的,但在基本形式下,只能计算数据点似然的下界。然而,Kingma等,2021证明,这个下界对于来自归一化流和自回归模型的测试数据的精确对数似然有所改进。扩散模型的似然可以通过将其转换为常微分方程(Song等,2021c)或通过训练基于扩散标准的连续归一化流模型(Lipman等,2022)来计算。扩散模型的主要缺点是速度较慢,并且潜在空间没有语义解释。
提升质量: 已经提出了许多技术来改善图像质量。其中包括在网络中重新参数化(参见第 18.5 节)和对后续项进行等权重处理(Ho et al. ,2020)。随后,Choi et al. ,2022 对损失函数中的不同项进行了权重调整的研究。
Kingma et al. ,2021 通过学习去噪权重
Ho等人,2022a提出了级联方法来生成非常高分辨率的图像(图18.11)。为了防止低分辨率图像中的伪影传播到更高分辨率,他们引入了噪声条件增强;在训练过程中,通过在每个步骤中向低分辨率条件图像添加噪声来降低对具体细节的依赖。在推断过程中,也会进行这一步骤,通过尝试不同的噪声水平来选择最佳的噪声水平值。
提高速度: 扩散模型的一个主要缺点是训练和样本抽取需要很长时间。稳定扩散(Rombach等人,2022)通过传统的自动编码器将原始数据投影到较小的潜在空间,并在这个较小的空间中进行扩散过程。这样做的好处是减少了扩散过程中训练数据的维度,并且可以使用扩散模型描述其他类型的数据(如文本、图形等)。Vahdat等人,2021采用了类似的方法。
Song et al. , 2021a 的研究表明,一整个扩散过程家族与训练目标是兼容的。其中大部分过程是非马尔科夫的(即扩散步骤不仅依赖于前一步的结果)。其中一个模型是去噪扩散隐式模型(DDIM),其中更新是非随机的(图18.10b)。这个模型可以采取更大的步长(图18.10b)而不引起大误差。它有效地将模型转化为一个常微分方程(ODE),其中轨迹的曲率很低,并且可以应用高效的数值方法来求解ODEs。
Song等人(2021c)提出了将基础的随机微分方程转化为概率流动ODE,其具有与原始过程相同的边际分布。Vahdat等人(2021)、xiao等人(2022b)和Karras等人(2022)都利用求解ODE的技术来加快合成过程。Karras等人(2022)确定了最佳的时间离散化方法,并评估了不同的采样器调度策略。这些和其他改进措施导致在合成过程中所需的步骤数量显著减少。
采样速度较慢,因为需要进行许多小的扩散步骤,以确保后验分布
Salimans & Ho , 2022 将去噪过程的相邻步骤融合为单个步骤,以加快合成的速度。Dockhorn et al. , 2022 在扩散过程中引入了动量。这使得轨迹更加平滑,因此更适合进行粗糙采样。
条件生成: Dhariwal & Nichol , 2021 提出了分类器引导的方法,在这种方法中,分类器学习在每个步骤中识别合成对象的类别,并用于偏向该类别的降噪更新。这种方法效果很好,但训练一个独立的分类器成本很高。无分类器引导(Ho & Salimans , 2022)同时训练有条件和无条件的降噪模型,通过在一定比例的时间内丢弃类别信息,实现了类似于dropout的过程。这种技术可以控制条件和无条件成分的相对贡献。过度加权条件成分会使模型生成更典型和真实的样本。
在对图像进行条件控制的标准技术中,通常是将(调整大小后的)图像追加到U-Net的不同层中。例如,在级联生成超分辨率的过程中使用了这种技术(Ho等人,2022a)。Choi等人(2021)提供了一种在无条件扩散模型中对图像进行条件控制的方法,该方法通过将潜在变量与条件图像的潜在变量进行匹配。对于文本的条件控制的标准技术是将文本嵌入线性转换为与U-Net层大小相同,然后以与引入时间嵌入的方式相同将其添加到表示中(图18.9)。
使用一种称为“控制网络”的神经网络结构,现有的扩散模型还可以进行微调,以实现对边缘图、联合位置、分割、深度图等进行条件控制(Zhang&Agrawala,2023)。
在扩散模型出现之前,最先进的文本生成图像系统基于Transformer。GLIDE和Dall E 2都使用来自CLIP模型的嵌入作为条件,该模型可以生成文本和图像数据的联合嵌入。研究表明,使用大型语言模型的文本嵌入可以产生更好的结果。同样的研究人员还创建了一个用于评估模型能力的基准测试,包括颜色、物体数量、空间关系等特征。此外,还有一种针对中文的文本生成图像模型被开发出来。
与其他模型的关联: 本章将扩散模型描述为分层变分自动编码器,因为这种方法与本书的其他部分关联最紧密。然而,扩散模型还与随机微分方程(考虑图18.5中的路径)以及得分匹配(Song&Ermon,2019,2020)密切相关。Song等,2021c提出了一个基于随机微分方程的框架,涵盖了去噪和得分匹配的解释。扩散模型还与归一化流(Zhang&Chen,2021)密切相关。Yang等,2022总结了扩散模型与其他生成方法之间的关系。
18.9 问题 - Problems
问题 18.1 证明当
则有
问题 18.2 考虑以下变量:
其中
因此我们可以等价地计算
问题18.3 按照方程18.5的过程继续,证明:
其中
问题18.4∗ 证明关系:
问题18.5∗ 证明关系:
问题18.6∗ 推导方程18.15。
问题 18.7∗ 从第二行推导出方程[18.25]的第三行。
问题 18.8∗ 两个具有均值为
将方程[18.27]的定义代入这个表达式,并且证明只有方程[18.28]的第一项依赖于参数
问题 18.9^∗^ 如果
问题 18.10 如果
问题 18.11∗ 证明方程式 18.37 。
问题 18.12 无分类器的引导使我们能够创建更多类别的固定化的“典型”图像。当我们描述变压器解码器、生成对抗网络和 GLOW 算法时,我们还讨论了减少变异程度和生成更具典型特征的输出的方法。这些方法是什么?你认为我们应该以这种方式限制生成模型的输出是不可避免的吗?
[译]第19章 强化学习 - Reinforcement learning 《理解深度学习 - Understanding Deep Learning》

本文是基于Simon J.D. Prince 的新书《Understanding Deep Learning》翻译而来;
- 原书介绍、原书(英文)下载、译文进展 以及 译文内容请戳 ↓↓↓
- [译]《理解深度学习 - Understanding Deep Learning 》 - 目录&前言 - ATA (atatech.org)
↓↓↓ 以下正文↓↓↓
本章目录
- 本章目录
- 第19章 强化学习 - Reinforcement learning
- 19.1 马尔可夫决策过程、回报和策略 - Markov decision processes, returns, and policies
- 19.2 期望回报 - Expected return
- 19.3 Tabular强化学习算法 - Tabular reinforcement learning
- 19.4 拟合Q学习 - Fitted Q-learning
- 19.4.1 用于玩 ATARI 游戏的深度 Q 网络 - Deep Q-networks for playing ATARI games
- 19.4.2 双 Q 学习和双深度 Q 网络 - Double Q-learning and double deep Q-networks
- 19.5 策略梯度方法 - Policy gradient methods
- 19.5.1 梯度更新的推导 - Derivation of gradient update
- 19.5.2 REINFORCE 算法 - REINFORCE algorithm
- 19.5.3 基准值 - Baselines
- 19.5.4 基于状态的基准 - State-dependent baselines
- 19.6 行动者-评论家方法 - Actor-critic methods
- 19.7 离线强化学习 - Offline reinforcement learning
- 19.8 总结 - Summary
- 19.9 注释 - Notes
- 问题
第19章 强化学习 - Reinforcement learning
强化学习(RL)是一个顺序决策的框架,代理通过学习在环境中执行动作,以最大化获得的奖励。例如,在一个视频游戏中,一个RL算法可以控制一个角色(代理)的移动(动作),以最大化得分(奖励)。在机器人领域,一个RL算法可以控制一个机器人(代理)在世界中的移动(动作),执行一个任务(获得奖励)。在金融领域,一个RL算法可以控制一个虚拟交易者(代理)在交易平台上买卖资产(动作),以最大化利润(奖励)。
考虑学习下棋。在这里,如果代理赢了游戏,游戏结束时的奖励是+1;如果代理输了游戏,奖励是-1;如果是平局,奖励是0,在其他时间步骤都是0。这说明了强化学习的挑战。
- 首先,奖励是稀疏的;在这里,我们必须玩整个游戏才能得到反馈。
- 其次,奖励与导致它的动作的时间间隔有所偏差;在取得胜利之前可能需要走30步。我们必须将奖励与这个关键的动作联系起来,这被称为“时序信用分配问题”。
- 第三,环境是随机的;对手在相同的情况下并不总是采取相同的动作,因此很难知道一个动作是真的好还是只是幸运。
- 最后,代理必须在探索环境(例如尝试新的开局)和利用已知信息之间取得平衡(例如坚持以前成功的开局),这被称为“探索和利用的权衡”。
强化学习是一个综合框架,不一定需要深度学习。然而,在实践中,最先进的系统通常使用深度网络来编码环境(如视频游戏显示、机器人传感器、金融时间序列或棋盘),并将其直接或间接地映射到下一个动作(图1.13)。
19.1 马尔可夫决策过程、回报和策略 - Markov decision processes, returns, and policies
强化学习将环境的观察映射到动作,旨在最大化与所接收到的奖励相关的数值量。在最常见的情况下,我们学习一种在马尔可夫决策过程中最大化期望回报的策略。本节将解释这些术语。
19.1.1 马尔可夫过程 - Markov process
马尔可夫过程假设世界始终处于一组可能的状态之一。马尔可夫一词意味着处于某个状态的概率仅取决于前一个状态,而不取决于之前的状态。状态之间的转换通过转移概率

图19.1 马尔可夫过程。 马尔可夫过程由一组状态和转移概率
定义,该概率表示在当前状态 的情况下转移到状态 的概率。
- a) 这只企鹅可以在冰上访问16个不同的位置(状态)。
- b) 冰是滑的,因此每次都有相等的概率移动到任何相邻状态。例如,在位置6,它有25%的概率移动到状态2、5、7和10。该过程的轨迹
由一系列状态组成。
19.1.2 马尔可夫奖励过程 - Markov reward process
马尔可夫奖励过程 还包括了在下一个时间步骤中,给定我们处于状态

图 19.2 马尔可夫奖励过程。 这将每个状态
关联到了奖励 的分布 。
- a) 在这个例子中,奖励是确定的;如果企鹅落在鱼上,将获得 +1 的奖励,否则为 0。现在轨迹
由交替的状态和奖励序列 组成,八个步骤后终止。回报 是未来奖励的折扣和,这里的折扣因子为 。 - b-c) 随着企鹅沿着轨迹前进并接近奖励,回报逐渐增加。
马尔可夫奖励过程还包括一个 折扣因子
回报是未来奖励的累积折扣和,它衡量了沿着这条轨迹的未来收益。小于一的折扣因子使得离现在更近的奖励比离现在较远的奖励更有价值。
19.1.3 马尔可夫决策过程 - Markov decision process
马尔可夫决策过程 或 MDP 在每个时间步骤上添加了一组可能的 动作。动作
图 19.3 马尔可夫决策过程。
- a)代理(企鹅)在每个状态下可以执行一组动作。动作既会影响移动到后继状态的概率,也会影响获得奖励的概率。
- b)这里,四个动作分别对应向上、向右、向下和向左移动。
- c)对于任何状态(这里是状态6),动作会改变移动到下一个状态的概率。企鹅以50%的概率沿着预期的方向移动,但冰面很滑,所以它可能以相同的概率滑向其他相邻位置。因此,在图(a)中,所采取的动作(灰色箭头)并不总是与轨迹(橙色线)一致。在这里,动作不会影响奖励,因此
。MDP的轨迹τ由一系列交替的状态 、动作 和奖励 组成。请注意,这里企鹅在离开有鱼的状态时才会获得奖励(即通过鱼的方格时获得奖励,无论企鹅是否有意到达那里)。
19.1.4 部分可观察的马尔可夫决策过程 - Partially observable Markov decision process
在部分可观察的马尔可夫决策过程或POMDP中,状态不是直接可见的(图19.4)。相反,代理接收到一个从
图 19.4 部分可观测的马尔可夫决策过程(POMDP)。 在POMDP中,代理无法获得完整的状态信息。在这个例子中,企鹅处于第三个状态,只能看到虚线框中的区域。这与它在第九个状态看到的是一样的。在第一种情况下,向右移动会导致掉入冰洞(-2的奖励),而在后一种情况下,会找到鱼(+3的奖励)。
19.1.5 策略 - Policy
决定代理在每个状态下采取的动作的规则被称为策略(图19.5)。策略可以是随机的(策略为每个状态定义了一个动作的分布)或者确定性的(代理在给定状态下始终采取相同的动作)。一个随机策略

图 19.5 策略。
- a)确定性策略在每个状态下总是选择相同的动作(由箭头表示)。有些策略比其他策略更好。这个策略不是最优的,但通常会引导企鹅从左上角到右下角,那里有奖励。
- b)这个策略更加随机一些。
- c)随机策略对于每个状态都有一个动作的概率分布(概率由箭头的大小表示)。这样的策略有利于代理更全面地探索状态,并且在部分可观测的马尔可夫决策过程中达到最优的性能可能是必要的。
环境和智能体(Agent)形成一个循环(图 19.6)。智能体(Agent)从上一个时间步接收到状态

图 19.6 强化学习循环。 智能体(Agent)根据状态
和策略 在时间 选择动作 。这会触发新状态 (通过状态转移函数)和奖励 (通过奖励函数)的生成。两者都传递回智能体(Agent),然后智能体(Agent)选择一个新的动作。
19.2 期望回报 - Expected return
前一节介绍了马尔可夫决策过程和智能体(Agent)根据策略执行动作的概念。我们希望选择一个最大化期望回报的策略。在本节中,我们将这个想法数学化。为此,我们为每个状态
19.2.1 状态和动作值 - State and action values
回报
我们可以通过考虑预期回报来评估在给定策略下一个状态的“好坏”。这个预期回报被称为状态值函数或状态值(图19.7a):
简单来说,状态值告诉我们,如果我们从这个状态开始,并按照指定的策略继续,我们可以预期获得的“长期”回报。对于可能很快带来较大回报的后续转移,状态值较高(假设折扣因子
类似地,动作值函数
动作值告诉我们,如果我们从这个状态开始,执行这个动作,并按照指定的策略继续,我们可以预期获得的“长期”回报。通过这个概念,强化学习算法将未来的回报与当前的动作联系起来(即解决时序的信用分配问题)。

图19.7 状态值和动作值。
- a)状态
的值 (每个位置的数字)是在给定策略 下,该状态对应的预期回报(灰色箭头)。它是从该状态开始的许多轨迹中收到的折扣回报的平均值。在这里,离鱼更近的状态更有价值。 - b)在状态
中采取动作 的值 (每个位置/状态下的四个数字对应于四个动作)是在采取该特定动作时得到的预期回报。在这种情况下,随着我们离鱼越来越近,它变得越来越大,并且对于指向鱼的动作而言更大。 - c)如果我们知道一个状态的动作值,那么可以修改策略,使其选择这些值中的最大值(面板b中的红色数字)。
19.2.2 最佳策略 - Optimal policy
我们希望找到一种能够最大化预期回报的策略。对于 MDP(但不适用于 POMDP)来说,总是存在一种确定性、稳定的策略,使得每个状态都能达到最大值。如果我们知道这个最佳策略,那么我们可以得到最佳的状态值函数
同样地,最佳的状态-动作值函数也可以在最佳策略下得到:
换句话说,如果我们知道最佳的动作值函数
^[1]^ 方程 [19.6],[19.12] 和 [19.13] 中的符号
的意思是将动作 的概率设为一,其它动作的概率设为零。
事实上,一些强化学习算法是基于交替估计动作值函数和策略的(参见第 19.3 节)。
19.2.3 Bellman 方程 - Bellman equations
我们可能不知道任何策略下的状态值
^[2]^ 为了简化起见,我们从现在开始只写
和 ,而不是 和 。

图 19.8 状态值和动作值之间的关系。 状态六
的值是状态六的动作值 的加权和,其中权重是采取该动作的策略概率 。
同样,动作的值是采取该动作所获得的即时奖励
^[3]^ 我们还假设奖励是确定的,可以用
表示。

图 19.9 动作值和状态值之间的关系。 在状态六采取动作二的值
是采取该动作所获得的奖励 加上处于后继状态的折现值 的加权和,其中权重是转移概率 。贝尔曼方程将此关系与图 19.8 的关系相链接,以连接当前和下一个(i)状态值和(ii)动作值。
将方程 19.8 代入方程 19.7,得到时间
同样,将方程 19.7 代入方程 19.8,得到时间
后两个关系是贝尔曼方程,是许多强化学习方法的基础。简单地说,它们表明状态(动作)值必须是自洽的。因此,当我们更新一个状态(动作)值的估计时,这将产生涟漪效应,影响所有其他值的修改。
19.3 Tabular强化学习算法 - Tabular reinforcement learning
Tabular强化学习算法(即不依赖于函数逼近的算法)分为基于模型和无模型的方法。基于模型的方法明确使用MDP结构,并根据转移矩阵
^[4]^ 在RL中,一个轨迹是一系列观察到的状态、奖励和动作。一次模拟的轨迹称为一个回合(rollout)。一个回合是从初始状态开始并在终止状态结束的轨迹(例如,从标准开局位置开始并以胜利、失败或平局结束的整个国际象棋游戏)。
相反,无模型的方法放弃了MDP模型,并分为两类:
- 价值估计方法首先估计最优状态动作值函数,然后根据每个状态中具有最大值的动作分配策略。
- 策略估计方法直接使用梯度下降技术估计最优策略,而不需要估计模型或值的中间步骤。
在每个类别中,蒙特卡洛方法通过对给定策略在MDP中模拟多个轨迹来收集信息,以改进该策略。有时在更新策略之前模拟多个轨迹是不可行或不实际的。时序差分(TD)方法在智能体(Agent)遍历MDP时更新策略。
现在我们简要介绍一下动态规划方法、蒙特卡洛值估计方法和TD值估计方法。第19.4节详细介绍了如何在TD值估计方法中使用深度网络。而在第19.5节中,我们将探讨策略估计方法。
19.3.1 动态规划 - Dynamic programming
动态规划算法假设我们对状态转移和奖励结构有完美的了解。这与大多数强化学习算法不同,后者通过观察智能体(Agent)与环境的交互来间接地收集有关这些量的信息。
我们将状态值
策略评估: 我们遍历状态
其中
策略改进: 为了更新策略,我们会贪心地选择在每个状态下能最大化值的动作:
根据策略改进定理,这样做可以保证改进策略。
这两个步骤会反复进行,直到策略收敛(图19.10)。

图 19.10 动态规划。
这种方法有很多变种。在策略迭代中,在策略改进之前,会先进行策略评估步骤,直到收敛。值可以在原地更新,也可以在每次遍历中同步更新。在值迭代中,在策略改进之前,策略评估过程只进行一次。异步动态规划算法不需要按照系统性的顺序遍历所有的值,而是可以按任意顺序原地更新一部分状态的值。
19.3.2 蒙特卡洛方法 - Monte Carlo methods
与动态规划算法不同,蒙特卡洛方法不需要知道MDP的转移概率和奖励结构。相反,它通过重复从MDP中采样轨迹并观察奖励来积累经验。它们的工作方式是先计算动作值(基于经验),然后根据动作值更新策略。
为了估计动作值

图 19.11 蒙特卡洛方法。
- a)策略(箭头)随机初始化。MDP被重复模拟,这些回合的轨迹被存储(橙色和棕色路径代表两个轨迹)。
- b)基于观察到的回报的经验估计的动作值,通过对这些轨迹进行平均计算得到。在本例中,动作值最初都为零,并在观察到动作后进行了更新。
- c)然后,根据获得最佳(或最少坏)回报的动作来更新策略。
这是一种按政策进行的方法;通过当前最佳策略指导智能体(Agent)在环境中进行操作。该策略基于每个状态中观察到的行动值,但是当然,无法估计未使用过的行动的价值,并且没有任何东西鼓励算法去探索这些行动。一种解决方案是使用探索初始值。在这种情况下,将启动具有所有可能的状态-动作对的情节,以便每个组合至少观察一次。然而,如果状态数目很大或起始点无法控制,这种方法就不实际。另一种方法是使用ε-贪婪策略,在该策略中,以概率
相反,在离策略方法中,根据由不同的行为策略
19.3.3 时间差异方法 - Temporal difference methods
动态规划方法使用自我引导的过程来更新值,以使其符合当前策略下的一致性。蒙特卡洛方法通过采样MDP来获取信息。时间差异(TD)方法结合了自我引导和采样。然而,与蒙特卡洛方法不同的是,它们在代理人遍历MDP的状态时而不是之后更新值和策略。
SARSA(状态-动作-奖励-状态-动作)是一种以策略为基础的算法,其更新公式为:
其中
相比之下,Q学习是一种离策略算法,其更新公式为(图 19.12)):
其中,每一步的行动选择是根据不同的行为策略

图 19.12 Q学习。
- a)代理人从状态
开始,并根据策略采取动作 。它不会在冰上滑倒,向下移动,离开原始状态获得奖励 。 - b)找到新状态下的最大动作值(这里是0.43)。
- c)基于当前对后续状态最大动作值的估计、奖励、折扣因子
和学习率 ,将原始状态中动作2的动作值更新为1.12。这改变了原始状态的最高动作值,因此策略发生了变化。
在这两种情况下,策略的更新是通过在每个状态上选择动作值的最大值来进行的(方程19.13)。可以证明这些更新是收缩映射(参见方程16.20);假设每个状态-动作对都被无限次访问,动作值最终会收敛。
19.4 拟合Q学习 - Fitted Q-learning
上述的表格蒙特卡洛和TD算法重复遍历整个MDP并更新动作值。然而,如果状态-动作空间很大,这种方法是不切实际的。不幸的是,这种情况很少出现;即使是对于象棋棋盘这样受限制的环境,可能的合法状态超过
在拟合Q学习中,动作值的离散表示
这导致了以下更新:
拟合Q学习与Q学习的不同之处在于不再保证收敛。参数的改变可能同时修改目标
这可以从理论上和实践上都证明会对收敛性产生不利影响。
19.4.1 用于玩 ATARI 游戏的深度 Q 网络 - Deep Q-networks for playing ATARI games
深度神经网络非常适合从高维状态空间中进行预测,因此在拟合 Q 学习模型中,它们是一个天然的选择。原则上,它们可以同时接收状态和动作作为输入,并预测相应的值,但在实际应用中,网络只接收状态,并同时预测每个动作的值。
深度 Q 网络 是一种突破性的强化学习架构,利用深度网络来学习玩 ATARI 2600 游戏。观察到的数据包括

图 19.13 Atari 基准。 Atari 基准包含了49个 Atari 2600 游戏,包括打砖块(如图所示)、乒乓球和各种射击、平台等类型的游戏。
- a-d) 即使对于单屏游戏,从单个帧无法完全观察到完整的状态,因为对象的速度是未知的。因此,通常使用几个相邻帧(这里是四个)来表示状态。
- e) 通过摇杆来模拟用户输入的动作。
- f) 一共有18种动作,分别对应八个移动方向或不移动,对于每种情况,还有一个按钮是否被按下。

图 19.14 Deep Q-network 架构。 输入
是 ATARI 游戏的四个相邻帧。每个帧都被调整为 的大小,并将其转换为灰度图像。这些帧通过 的步长为四的卷积层进行处理,然后是步长为2的 的卷积层,最后是两个全连接层。最终的输出预测了该状态下每个动作的动作价值 ,共有18个动作。
对标准训练程序进行了几个修改。首先,奖励(由游戏中的分数驱动)被剪裁为负值变化时为1,正值变化时为+1。这样做是为了弥补不同游戏之间分数差异很大的问题,并且可以使用相同的学习率。其次,该系统利用了经验回放。而不是基于当前步骤或最后
最后,通过将目标参数固定为值
现在,网络不再追逐移动的目标,而且不容易出现振荡现象。
使用这些和其他的启发式方法以及ϵ-贪婪策略,在相同的网络上(针对每个游戏单独训练)的49个游戏中,Deep Q-Networks的表现相当于一名专业游戏测试员。需要注意的是,训练过程需要大量数据。每个游戏学习所需的经验时间约为38天。在某些游戏中,该算法超过了人类的表现。但在其他游戏中,如《蒙特祖玛的复仇》(Montezuma's Revenge),几乎没有取得任何进展。这款游戏的特点是奖励很稀疏,多个屏幕外观差异很大。
19.4.2 双 Q 学习和双深度 Q 网络 - Double Q-learning and double deep Q-networks
Q 学习的一个潜在缺陷是在更新中对动作进行最大化操作时会引入对估计状态值
考虑两个提供相同平均奖励的动作,但一个是随机的,另一个是确定的。随机奖励大约一半的时间会超过平均奖励,并通过最大化操作被选择,导致相应的动作值
这个问题的根源在于同一个网络既选择目标(通过最大化操作),又更新值。双 Q 学习通过同时训练两个模型
现在目标的选择和目标本身是分离的,这有助于防止这些偏差。在实践中,新的元组
19.5 策略梯度方法 - Policy gradient methods
Q 学习首先估计动作值,然后使用这些值来更新策略。相反,基于策略的方法直接学习了一个随机策略
- 随机策略自然有助于对空间进行探索;我们不必在每个时间步骤上选择最佳动作。
- 当我们修改随机策略时,损失函数会平滑变化。这意味着即使奖励是离散的,我们也可以使用梯度下降方法。这类似于在(离散)分类问题中使用最大似然估计。随着模型参数的变化,使得真实类别的概率更大,损失函数会平滑变化。
- MDP 假设通常是不正确的;我们通常没有完全了解状态。例如,考虑一个在只能观察附近位置的环境中导航的智能体(Agent)(例如,图 19.4 )。如果两个位置看起来相同,但附近的奖励结构是不同的,随机策略允许在消除这种模糊性之前采取不同的行动。
19.5.1 梯度更新的推导 - Derivation of gradient update
考虑一个在MDP中的轨迹
策略梯度算法的目标是最大化许多这样轨迹的期望回报
其中回报是沿轨迹收到的所有奖励的总和。
为了最大化这个量,我们使用梯度上升更新:
其中
我们希望用经验观测到的轨迹总和来近似这个积分。这些轨迹是从分布
这个公式有一个简单的解释(图19.15));更新将参数
图 19.15 策略梯度。同一策略的五个轨迹(亮度表示奖励较高)。轨迹 1、2 和 3 产生了一致较高的奖励,但是在该策略下,类似的轨迹已经经常出现,因此无需改变。相反,轨迹 4 的奖励较低,所以应该修改策略以避免产生类似的轨迹。轨迹 5 的奖励较高且不寻常。这将在方程 19.25 下对策略产生最大的改变。
我们可以使用 似然比恒等式 简化这个表达式:
从而得到更新公式:
轨迹的对数概率
注意只有中间项依赖于
其中
其中
19.5.2 REINFORCE 算法 - REINFORCE algorithm
REINFORCE 是一种早期的策略梯度算法,利用了这个结果并引入了折扣。它是一种蒙特卡洛方法,根据当前策略
对于每个轨迹
然后我们更新每个轨迹中每个时间步骤
这里,
19.5.3 基准值 - Baselines
策略梯度方法存在一个缺点,即方差较高;可能需要许多回合才能获得稳定的导数更新。降低方差的一种方法是从基准值
只要基准值
期望值不会改变。然而,如果基准值与增加不确定性的无关因素共变,则减去它会减小方差(图 19.16 )。这是控制变量方法的一个特例(参见问题 19.7 )。

图 19.16 使用控制变量减小估计方差。
- a)考虑尝试从少量样本中估计
。估计值(样本的平均值)将根据样本数量和样本的方差而变化。 - b)现在考虑观察另一个与
共变且具有 和与 相同方差的变量 。 - c)
的样本方差远小于 的样本方差,但期望值 ,因此我们得到一个具有较低方差的估计器。
这引出了一个问题,我们应该如何选择
在实践中,通常近似为:
减去这个基准可以消除方差,这种方差可能发生在所有轨迹的回报
19.5.4 基于状态的基准 - State-dependent baselines
更好的选择是使用依赖于当前状态
在这里,我们通过某些状态的整体回报比其他状态更大来补偿引入的方差,无论我们采取什么行动。
一个明智的选择是基于当前状态的预期未来回报,即状态值
19.6 行动者-评论家方法 - Actor-critic methods
行动者-评论家算法是时差(TD)策略梯度算法。它们可以在每一步更新策略网络的参数。这与 Monte Carlo REINFORCE 算法形成对比,后者在更新参数之前必须等待一个或多个回合的完成。
在 TD 方法中,我们无法准确获取轨迹上的未来奖励
这里的值
将这个结果代入方程式 19.38 中,我们得到了更新公式:
同时,我们通过使用以下损失函数对参数
预测策略
19.7 离线强化学习 - Offline reinforcement learning
强化学习的核心在于与环境的互动。然而,在某些场景下,直接将一个天真的智能体(Agent)送入环境中探索不同动作的效果是不切实际的。这可能是因为环境中的异常行为是危险的(例如自动驾驶车辆)或者因为数据收集是耗时或昂贵的(例如进行金融交易)。
然而,在这两种情况下,我们都可以从人类智能体(Agent)那里收集历史数据。离线强化学习(Offline RL)或批处理强化学习的目标是通过观察过去的序列
虽然基于Q-Learning和策略梯度的离线强化学习方法已经存在,但这种范式开辟了新的可能性。特别地,我们可以将其视为一个序列学习问题,目标是在给定状态、奖励和动作的历史情况下预测下一个动作。决策转换器(Decision Transformer)利用了一个Transformer解码器框架(第12.7节)来进行这些预测(图19.17)。

图 19.17 决策 Transformer。 决策 Transformer 将离线强化学习看作是一个序列预测任务。输入是一系列的状态、动作和“剩余奖励(返回值)”,每个都被映射到一个固定大小的嵌入向量中。在每个时间步,网络预测下一个动作。在测试阶段,我们无法得知“剩余奖励”,但实际上我们可以从一个初始估计值开始,并逐渐减去之后观察到的奖励。
然而,我们的目标是基于未来的奖励来预测行动,而这些奖励在标准的
这种训练方式在理论上是合理的,但在推理过程中却面临一个困境,因为我们无法得知返回值。为了解决这个问题,可以在第一步使用预期的总返回值,并随着获得奖励的递减。例如,在 Atari 游戏中,期望的总返回值将是获胜所需的总分数。
决策转换器还可以通过在线经验进行微调,从而随着时间的推移不断学习。它们的优势在于减少了大部分强化学习机制及其相关的不稳定性,并采用了标准的监督学习方法。变换器可以从大量的数据中学习,并在较长的时间范围内整合信息(从而更好地解决时间上的学分分配问题)。这代表了强化学习领域一种新颖而有趣的方向。
19.8 总结 - Summary
强化学习是一种用于马尔可夫决策过程和类似系统的顺序决策框架。本章回顾了RL的表格方法,包括动态规划(已知环境模型),蒙特卡洛方法(多次运行多个剧集,并基于接收到的奖励改变动作值和策略),以及时序差分方法(在剧集进行时更新这些值)。
Deep Q-Learning是一种时序差分方法,其中利用深度神经网络预测每个状态的动作值。它可以训练代理以达到与人类相似水平的Atari 2600游戏。策略梯度方法直接优化策略而不是为动作分配值。它们产生随机策略,在环境部分可观察时非常重要。更新是有噪声的,为了减少方差,引入了许多改进方法。
离线强化学习用于当我们无法与环境进行交互但必须从历史数据中学习的情况。决策变换器利用深度学习的最新进展,构建了状态-动作-奖励序列的模型,并预测将最大化奖励的动作。
19.9 注释 - Notes
Sutton & Barto, 2018 对表格强化学习方法进行了深入介绍。Li, 2017,Arulkumaran et al., 2017,François-Lavet et al., 2018和Wang et al., 2022c 都提供了深度强化学习的概述。Graesser & Keng, 2019 是一本包含Python代码的优秀入门资源。
深度强化学习的里程碑: 自强化学习的重要突破大多出现在视频游戏或现实世界游戏中,因为这些环境具有限制和固定的规则。深度 Q 学习(Mnih 等人,2015年)在 ATARI 游戏中取得了与人类相媲美的表现。AlphaGo(Silver 等人,2016年)击败了围棋世界冠军。以前,计算机被认为很难下围棋。Berner 等人(2019年)构建了一个系统,在五对五的游戏《DOTA2》中战胜了世界冠军团队,这需要玩家之间的合作。Ye 等人(2021年)构建了一个系统,可以在 ATARI 游戏中以有限的数据击败人类(与之前的系统相比,需要比人类更多的经验)。最近,Cicero 系统在需要自然语言协商和玩家之间协调的游戏《Diplomacy》中展现出了与人类水平相当的表现(FAIR,2022年)。
强化学习还成功应用于组合优化问题(见Mazyavkina等人,2021年)。例如,Kool等人(2019年)学习了一个模型,其性能与旅行推销员问题的最佳启发式方法相似。最近,AlphaTensor(Fawzi等人,2022年)将矩阵乘法视为一种游戏,并学习了更快的矩阵乘法方式,使用更少的乘法操作。由于深度学习高度依赖矩阵乘法,这是AI自我提升的一个典型例子。
经典强化学习方法: Thompson, 1933和Thompson, 1935在MDP理论方面进行了早期的重要贡献。Bellman的递归思想由Bellman, 1966引入。Howard, 1960提出了策略迭代的概念。Sutton & Barto, 2018将Andreae, 1969的工作视为首次使用MDP形式化描述强化学习。
强化学习的现代时代可以说始于Sutton, 1984和Watkins, 1989的博士论文。Sutton, 1988提出了时间差分学习的术语。Watkins, 1989和Watkins & Dayan, 1992引入了Q-Learning,并通过Banach的定理证明了其收敛于一个不动点,因为Bellman运算符是收缩映射。Watkins, 1989首次明确地将动态规划和强化学习联系起来。SARSA是Rummery & Niranjan, 1994开发的。Gordon, 1995引入了“拟合Q学习”的概念,其中使用机器学习模型来预测每个状态-动作对的行动价值。Riedmiller, 2005引入了“神经网络拟合Q学习”,它使用神经网络同时预测所有动作的价值。Singh & Sutton, 1996进行了蒙特卡洛方法的早期研究,而Sutton & Barto, 1999则引入了“探索起点算法”。需要注意的是,这只是对五十多年工作的概括性总结。更详细的论述请参考Sutton & Barto, 2018。
深度 Q 网络: 深度 Q-Learning 是由Mnih 等,2015 提出的,是神经拟合 Q-Learning 的一种智能继承者。它利用了卷积网络的最新成功,开发了一种能够在 ATARI 游戏基准测试中实现人类水平表现的拟合 Q-Learning 方法。深度 Q-Learning 遭受三重问题(Sutton 和 Barto,2018)的困扰:任何包含(i)自助法、(ii)离策略学习和(iii)函数逼近的方案中的训练都可能不稳定。随后的工作主要目标是使训练更加稳定。Mnih 等,2015 引入了经验回放缓冲区(Lin,1992),后来被Schaul 等,2016改进,以更青睐重要的元组,从而提高学习速度。这被称为“优先经验回放”。
原始的 Q-Learning 论文将四个帧连接起来,以便网络能够观察物体的速度,并使底层过程更接近完全可观察。Hausknecht 和 Stone,2015引入了深度循环 Q-Learning,它使用一种递归网络架构,每次只接收一个帧,因为它可以“记住”之前的状态。Van Hasselt,2010发现了由于最大操作而导致状态值的系统性高估,并提出了双 Q-Learning,即同时训练两个模型来解决这个问题。这后来应用于深度 Q-Learning(Van Hasseltet al.,2016),尽管它的有效性受到了质疑(Hessel 等,2018)。Wang 等,2016引入了深度对决网络,其中同一网络的两个头预测(i)状态值和(ii)每个动作的优势(相对值)。这里的直觉是有时候状态值很重要,采取什么动作并不重要,而解耦这些估计值可以提高稳定性。
Fortunato et al. , 2018 提出了噪声深度Q网络,在该网络中,Q网络的某些权重被噪声乘以,以增加预测的随机性并促进探索。随着网络逐渐收敛到一个合理的策略,它可以学习降低噪声的幅度。分布式DQN(Bellemare et al. , 2017a;Dabney et al. , 2018)旨在更全面地估计回报分布的信息,而不仅仅是期望值。这可能使网络能够缓解最坏情况的结果,并且还可以提高性能,因为预测更高阶矩提供了更丰富的训练信号。Rainbow(Hessel et al. , 2018)将六项改进应用于原始的深度Q学习算法,包括对决网络、分布式DQN和噪声DQN,以提高在ATARI基准测试上的训练速度和最终性能。
策略梯度: Williams , 1992 提出了REINFORCE算法。术语“策略梯度方法”最早见于Sutton et al. , 1999。Konda & Tsitsiklis , 1999提出了行动者-评论家算法。通过使用不同的基线来降低方差的方法在Greensmith et al. , 2004和Peters & Schaal , 2008中进行了讨论。后来有人认为价值基线主要是降低更新的侵略性,而不是方差(Mei et al. , 2022)。
策略梯度已经被改进为产生确定性策略(Silver et al. , 2014;Lillicrap et al. , 2016;Fujimoto et al. , 2018)。最直接的方法是最大化可能的动作,但如果动作空间是连续的,这就需要在每一步进行优化过程。深度确定性策略梯度算法(Lillicrap et al. , 2016)将策略沿着动作值的梯度方向移动(即使用行动者-评论家方法)。
现代策略梯度: 我们在参数更新方面介绍了策略梯度。然而,它们也可以被视为一种基于重要性采样的期望奖励的代理损失优化方法,使用当前策略参数的轨迹。这种观点使我们能够有效进行多次优化步骤。然而,这可能导致非常大的策略更新。在监督学习中,超出范围只是一个小问题,因为轨迹可以在后期进行修正。然而,在强化学习中,它影响未来的数据收集,并可能具有极其破坏性。
已提出了几种方法来调节这些更新。基于自然梯度(Kakade,2001)的自然策略梯度,通过费舍尔信息矩阵修改下降方向。这提供了一个更好的更新,更不容易陷入局部高原。然而,在具有许多参数的模型中,计算费舍尔矩阵是不切实际的。在信任区域策略优化(TRPO)(Sc hulman等人,2015)中,通过最大化替代目标并对旧策略和新策略之间的KL散度设置约束来进行优化。Schulman等人,2017提出了一个更简单的公式,其中KL散度作为正则化项出现。正则化权重根据KL散度与表示我们希望策略改变多少的目标之间的距离进行调整。近端策略优化(PPO)(Sc hulman等人,2017)是一种更简单的方法,其中损失被剪辑以确保更新更小。
行动者-评论家算法: 在行动者-评论家算法(Konda&Tsitsiklis,1999)中,评论家使用了一步估计。也可以使用k步估计(我们观察到k个折扣回报,并用状态值的估计近似后续回报)。随着k的增加,估计的方差增加,但偏差减小。广义优势估计(Sc hulman等,2016)将多步骤的估计结合在一起,并通过一个权重参数来权衡偏差和方差。Mnih等,2016引入了异步行动者-评论家或A3C,其中多个代理在并行环境中独立运行并更新相同的参数。策略和值函数每隔T个时间步使用k步回报的混合进行更新。Wang等,2017引入了几种方法,旨在使异步行动者-评论家更高效。软行动者-评论家(Haarnoja等,2018b)在成本函数中添加了一个熵项,鼓励探索并降低过拟合程度,因为策略被鼓励变得不那么自信。
离线强化学习: 在离线强化学习中,通过观察其他代理的行为(包括他们接收到的奖励),学习策略,而无法更改策略。它与模仿学习相关,目标是在没有奖励的情况下复制另一个代理的行为(参见Hussein等,2017)。一种方法是将离线强化学习视为离线策略评估。然而,在实践中,观察到的策略和应用的策略之间的分布变化导致对行动价值的过于乐观估计和性能不佳(参见Fujimoto等,2019;Kumar等,2019a;Agarwal等,2020)。保守Q学习(Kumar等,2020b)通过对Q值进行正则化来学习值函数的保守下界估计。决策变压器(Chen等,2021c)是一种简单的离线学习方法,利用了经过深入研究的自注意力架构。它可以随后通过在线训练进行微调(Zheng等,2022)。
强化学习和聊天机器人: 聊天机器人可以使用一种称为强化学习与人类反馈或RLHF( Christiano et al. , 2018 ; s_tiennon et al. , 2020 )的技术进行训练。例如,InstructGPT(ChatGPT的前身,Ouyang et al. , 2022 )从一个标准的Transformer解码器模型开始。然后根据人类注释员编写的提示-回应对对其进行微调。在这个训练过程中,模型被优化为预测真实回应中的下一个单词。
不幸的是,这种训练数据的产生成本很高,无法以足够数量支持高质量的性能。为了解决这个问题,人类注释员会指出他们更喜欢哪种模型回应。这些(更便宜的)数据用于训练一个奖励模型。这是一个第二个Transformer网络,它接收提示和模型回应,并返回一个标量,指示回应的好坏程度。最后,进一步训练微调的聊天机器人模型,使用奖励模型作为监督来产生高奖励。在这里,标准的梯度下降无法使用,因为无法通过聊天机器人输出的采样过程计算导数。因此,模型使用近端策略优化(一种能计算导数的策略梯度方法)进行训练,以生成更高的奖励。
其他强化学习领域: 强化学习是一个庞大的领域,很容易可以写一本书,而这篇文献综述只是表面的。我们没有讨论的其他值得注意的强化学习领域包括基于模型的强化学习,其中对状态转移概率和奖励函数进行建模(参见Moerland et al. , 2023 )。这可以进行前向规划,并且具有相同模型可以在不同的奖励结构下重用的优点。混合方法,如AlphaGo(Silver et al. , 2016 )和MuZero(Schrittwieser et al. , 2020 ),对状态的动态、策略以及未来位置的价值有单独的模型。
本章仅讨论了一些简单的探索方法,例如ε贪婪方法、有噪声的Q学习以及添加熵项以惩罚过于自信的策略。内在动机*是指为探索添加奖励的方法,从而赋予智能体(Agent)"好奇心"(参见Barto,2013; Aubret et al.,2019)。层次化强化学习(参见Pateria et al.,2021)是一种将最终目标分解为子任务的方法。多智能体(Agent)强化学习(参见[Zhang et al.,2021a]())考虑了多个智能体(Agent)在共享环境中共存的情况。这可以是竞争性或合作性的情境。
问题
问题19.1 图19.18 展示了一个示例马尔可夫决策过程的单个轨迹。假设折扣因子

图19.18 一个马尔可夫决策过程的单个轨迹。企鹅在到达第一个鱼瓷砖时获得+1的奖励,在掉入洞中时获得+2的奖励,并在到达第二个鱼瓷砖时获得+1的奖励。折扣因子
为0.9。
问题19.2 ∗ 证明策略改进定理。考虑从策略
对于其他所有状态,策略保持不变。证明原始策略的值必须小于或等于新策略的值
提示: 从新策略的角度,将项
问题 19.3 证明当状态值和策略初始化为图 19.10a 中的值时,经过两次(i)策略评估(根据当前值更新所有状态,然后替换之前的状态)和(ii)策略改进后,它们变为图 19.10b 中的值。状态转移将一半的概率分配给策略指示的方向,并将剩余的概率平均分配给其他有效操作。奖励函数在企鹅离开孔洞时返回-2,无论采取何种行动。奖励函数在企鹅离开鱼砖时返回+3,并且该情节结束,因此鱼砖的值为+3。
问题 19.4 Boltzmann策略通过将行动概率
问题 19.5 当学习率
证明这是一个收缩映射(方程16.30),从而得到:
其中
问题19.6 证明:添加基准更新不会改变预期的策略梯度更新。
问题19.7 假设我们想要从样本
证明当选择适当的常数
问题19.8 方程式 19.34 中的梯度估计可以表示为:
其中,
以及
证明最小化梯度估计的方差的
第2章 监督学习 - Supervised learning
监督学习模型 定义了从一个或多个输入到一个或多个输出的映射关系。例如,输入可能是一辆二手丰田普锐斯的年龄和里程,输出可能是该车的估值(以美元计算)。
模型只是一个数学方程;当输入通过该方程时,它会计算输出,这被称为推断。模型方程还包含参数。不同的参数值会改变计算结果;模型方程描述了输入和输出之间可能的关系,而参数则指定了具体的关系。
当我们训练或学习一个模型时,我们找到描述输入和输出之间真实关系的参数。学习算法使用一组 输入/输出对(input-output pair) 的训练集,并调整参数,使得输入尽可能准确地预测其对应的输出。如果模型对这些训练对表现良好,我们希望它对于未知的新输入也能做出良好的预测输出。
本章的目标是进一步扩展这些思想。首先,我们更正式地描述这个框架,并引入一些符号表示。然后,我们通过一个简单的例子来说明如何使用一条直线来描述输入和输出之间的关系。这个线性模型既熟悉又容易可视化,但它涵盖了监督学习的所有主要思想。
2.1 监督学习概述 - Supervised learning overview
在监督学习中,我们的目标是构建一个模型,它接收一个输入
为了进行预测,我们需要一个模型
当我们从输入
模型只是一个具有固定形式的数学方程。它表示了输入和输出之间的不同关系的集合。模型还包含参数
当我们谈论学习或训练一个模型时,意味着我们试图找到参数
我们可以将损失视为这些参数的函数
如果在这个最小化过程后损失较小,我们就找到了能够准确预测训练输出
训练完模型后,我们现在需要评估它的性能;我们在单独的测试数据上运行模型,看它在没有在训练中观察过的示例上的泛化能力如何。如果性能足够好,那么我们就可以部署这个模型。
2.2 线性回归示例 - Linear regression example
让我们通过一个简单的例子将这些思想具体化。我们考虑一个模型
2.2.1 一维线性回归模型 - 1D linear regression model
一维线性回归模型将输入
更准确地说,损失函数还依赖于训练数据
,因此我们应该写成 ,但这样写会非常繁琐。

图2.1 线性回归模型。对于给定的参数选择
,模型根据输入(x轴)预测输出(y轴)。不同的y截距 和斜率 选择会改变这些预测(青色、橙色和灰色线)。线性回归模型(方程2.4)定义了一族输入/输出关系(直线),而参数确定了这个族中的成员(特定的直线)。
这个模型有两个参数
2.2.2 损失函数
对于这个模型,训练数据集(图2.2a))由 I 个输入/输出对
不匹配通过模型预测值
由于最佳参数使得这个表达式最小,我们称之为最小二乘损失。平方操作意味着偏差的方向(即线在数据上方还是下方)是无关紧要的。这个选择还有理论上的原因,在第5章中我们会回到这个问题。

图2.2 线性回归的训练数据、模型和损失。
- a) 训练数据(橙色点)由 I = 12 个输入/输出对
组成。 - b-d) 每个面板显示了具有不同参数的线性回归模型。根据y截距和斜率参数的选择
,模型的误差(橙色虚线)可能更大或更小。损失函数 L 是这些误差的平方和。面板(b)和(c)中定义线的参数具有较大的损失 L = 7.07 和 L = 10.28,因为模型拟合得不好。 - 面板(d)中的损失 L = 0.20 较小,因为模型拟合得很好;实际上,这是所有可能线中损失最小的参数,因此这些是最优参数。

图2.3 线性回归模型在图2.2a中的损失函数。
损失 L 是参数
由于只有两个参数(y截距
2.2.3 训练
寻找使损失最小化的参数的过程称为模型拟合、训练或学习。基本方法是随机选择初始参数,然后通过“下降”损失函数来改进它们,直到达到最低点(图2.4)。其中一种方法是测量当前位置处曲面的梯度,并朝最陡峭的下坡方向迈出一步。然后我们重复这个过程,直到梯度变平,无法再进一步改进2。
2.2.4 测试
在训练完模型之后,我们希望知道它在真实世界中的表现如何。为了做到这一点,我们需要在一个单独的测试数据集上计算损失。预测准确性在多大程度上能够泛化到测试数据取决于训练数据的代表性和完整性。然而,它还取决于模型的表达能力。像一条直线这样简单的模型可能无法捕捉输入和输出之间的真实关系。这被称为欠拟合。相反,一个非常表达能力强的模型可能描述训练数据的统计特性,而这些特性在数据中是不典型的,导致异常的预测结果。这被称为过拟合。
2.3 总结
监督学习模型是一个函数
第3-9章对这些思想进行了扩展。首先,我们解决模型本身;线性回归的明显缺点是它只能将输入和输出之间的关系描述为一条直线。浅层神经网络(第3章)比线性回归稍微复杂一些,但可以描述更大的输入/输出关系族。深层神经网络(第4章)同样具有表达能力,但可以用更少的参数描述复杂的函数,并在实践中表现更好。
第5章研究了不同任务的损失函数,并揭示了最小二乘损失的理论基础。第6章和第7章讨论了训练过程。第8章讨论了如何衡量模型的性能。第9章考虑了改善性能的正则化技术。
这种迭代方法实际上对于线性回归模型并不是必需的。在这种情况下,可以找到参数的闭式表达式。然而,这种梯度下降方法适用于更复杂的模型,其中没有闭式解,并且有太多参数无法对每个值组合计算损失。

图2.4 线性回归训练。目标是找到与最小损失相对应的y截距和斜率参数。
- a) 迭代训练算法随机初始化参数,然后通过“向下走坡”来改进它们,直到无法再进一步改进。在这里,我们从位置0开始,向下走一定距离(垂直于等高线方向)到达位置1。然后我们重新计算向下走的方向,移动到位置2。最终,我们到达函数的最小值(位置4)。
- b) 面板(a)中的每个位置0-4对应于不同的y截距和斜率,因此代表不同的线。随着损失的减小,这些线更好地拟合数据。
笔记
损失函数与代价函数:在机器学习中,以及本书中,损失函数和代价函数这两个术语是可以互换使用的。然而,更准确地说,损失函数是与数据点相关联的个别项(即方程[2.5]右侧的每个平方项),而代价函数是要最小化的整体数量(即方程[2.5]的整个右侧)。代价函数可能包含与个别数据点无关的附加项(参见第9.1节)。更一般地说,目标函数是要最大化或最小化的任何函数。
生成模型与判别模型:本章中的模型
生成方法的缺点是它不能直接预测
这看起来是一个好主意,但事实上,判别模型在现代机器学习中占据主导地位。通过学习大量的训练数据,利用判别模型的灵活性通常能够超越在生成模型中利用先验知识所获得的优势。
问题
问题2.1 为了在损失函数(方程[2.5])上“向下走坡”,我们需要计算它对参数
问题2.2 证明我们可以通过将问题2.1中的导数表达式置零并解出
问题2.3 考虑将线性回归重新构建为一个生成模型,即
[译]第20章 深度学习为何有效? - why does deep learning work? 《理解深度学习 - Understanding Deep Learning》

本文是基于Simon J.D. Prince 的新书《Understanding Deep Learning》翻译而来;
- 原书介绍、原书(英文)下载、译文进展 以及 译文内容请戳 ↓↓↓
- [译]《理解深度学习 - Understanding Deep Learning 》 - 目录&前言 - ATA (atatech.org)
↓↓↓ 以下正文↓↓↓
本章目录
<!-- vscode-markdown-toc -->
- 本章目录
- 第20章 深度学习为何有效?
- 20.1 反对深度学习的观点 - The case against deep learning
- 20.2 影响拟合性能的因素 - Factors that influence fitting performance
- 20.2.1 数据集 - Dataset
- 20.2.2 正则化 - Regularization
- 20.2.3 随机训练算法 - Stochastic training algorithms
- 20.2.4 过参数化 - Overparameterization
- 20.2.5 激活函数 - Activation functions
- 20.2.6 初始化 - Initialization
- 20.2.7 网络深度 - Network depth
- 20.3 损失函数的性质 - Properties of loss functions
- 20.3.1 多个全局最小值 - Multiple global minima
- 20.3.2 达到最小值的路径 - Route to the minimum
- 20.3.3 最小值之间的联系 - Connections between minima
- 20.3.4 损失曲面的曲率 - Curvature of loss surface
- 20.4 决定泛化的因素 - Factors that determine generalization
- 20.5 我们需要这么多参数吗? - Do we need so many parameters?
- 20.6 网络是否必须深层? - Do networks have to be deep?
- 20.7 总结 - Summary
- 20.8 问题 - Problems
<!-- vscode-markdown-toc-config numbering=true autoSave=true /vscode-markdown-toc-config --> <!-- /vscode-markdown-toc -->
第20章 深度学习为何有效?
本章与前面的章节有所不同。它不是呈现已被确认的结果,而是提出了有关深度学习为何如此有效的问题。这些问题在教科书中很少被讨论。然而,我们要认识到(尽管本书的标题如此),对深度学习的理解仍然有限。
我们认为令人惊讶的是,深度神经网络很容易进行训练,并且具有泛化能力。然后我们依次探讨了这些问题。我们列举了影响训练成功的因素,并讨论了对于深度神经网络的损失函数已知的情况。然后,我们考虑了影响泛化能力的因素。最后,我们讨论了网络是否需要过度参数化和深度。
20.1 反对深度学习的观点 - The case against deep learning
MNIST-1D 数据集(图8.1)只有 40 个输入维度和 10 个输出维度。当每层有足够的隐藏单元时,一个两层全连接网络能够完美地对 10000 个 MNIST-1D 训练数据点进行分类,并且在未见过的样本上能够合理地进行泛化(图8.10a)。事实上,我们现在认为只要有足够的隐藏单元,深度网络几乎可以对任何训练集进行近乎完美的分类。我们还默认拟合的模型将能够泛化到新的数据。然而,训练过程是否能够成功,以及产生的模型是否能够泛化,这两个现象都不是显而易见的。本节将讨论这两个现象是多么令人惊讶。
20.1.1 训练 - Training
当每层都有43个隐藏单元(4000个参数)时,一个有两层全连接网络在10000个MNIST-1D训练样本上的表现是完美的。然而,找到任意非凸函数的全局最小值是一个NP难问题(Murty &Kabadi , 1987 ),而对于某些神经网络损失函数来说也是如此(Blum &Rivest , 1992 )。令人惊讶的是,拟合算法不会陷入局部最小值或者困在鞍点附近,并且它能够高效地利用多余的模型容量来拟合未解释的训练数据。
也许当参数比训练数据多得多时,这种成功情况就不那么令人惊讶了。AlexNet有6000万个参数,用100万个数据点进行训练。然而,复杂性在于,每个训练样本都被增加了2048个变换。GPT-3有1750亿个参数,用3000亿个标记进行训练。这两个模型是否过于参数化还存在争议,但它们都取得了成功。
简言之,我们能够可靠高效地拟合深度网络是令人惊讶的。数据、模型、训练算法或者它们三者的组合必须具备某些特殊属性,才使这成为可能。
20.1.2 泛化 - Generalization
如果神经网络的高效拟合令人惊叹,那么它们对新数据的泛化能力就更加令人瞠目结舌。首先,在先验的情况下,典型的数据集是否足以描述输入/输出映射是不明显的。维度灾难意味着训练数据集相对于可能的输入来说是微不足道的;如果将MNIST-1D数据的40个输入中的每一个量化为10个可能的值,那么可能的输入就有
其次,深度网络可以描述非常复杂的函数。一个具有两个宽度为400的隐藏层的MNIST-1D全连接网络可以创建高达
第三,随着参数数量的增加,泛化能力会变得更好(图8.10)。前面段落中的模型有177,201个参数。假设它可以拟合一个训练样本一个参数,那么它有167,201个多余的自由度。这样的过多自由度使得模型可以在训练数据之外做几乎任何事情,但它仍然能够表现得合理。
20.1.3 深度学习的卓越有效性 - The unreasonable effectiveness of deep learning
简而言之,我们事先并不清楚我们能否拟合深度网络,也不知道它们是否能够泛化。从先验的角度来看,深度学习不应该起作用。然而,它确实起作用。本章将探讨其中的原因。20.2-20.3节介绍了我们对拟合深度网络及其损失函数的了解。20.4-20.6节探讨了泛化能力。
20.2 影响拟合性能的因素 - Factors that influence fitting performance
图6.4显示,非线性模型的损失函数可能存在局部最小值和鞍点。然而,我们可以可靠地拟合复杂的训练集。例如,图8.10展示了对MNIST-1D、MNIST和CIFAR-100的完美训练效果。本节讨论可能解决这一矛盾的因素。
20.2.1 数据集 - Dataset
要知道,我们其实并不能学习任何函数。想象一下,将每个可能的
^[1]^ 在本章中,我们宽泛地使用术语“全局最小值”来指任何将所有数据都正确分类的解决方案。我们无法知道是否存在其他更低损失的解决方案。
Zhang et al. , 2017a 研究了这个假设,他们在CIFAR-10图像分类数据集上训练了AlexNet,其中(i)用高斯噪声替换了每个图像,以及(ii)将十个类别的标签随机重排(图 20.1 )。这些改变减慢了学习速度,但网络仍然可以很好地适应这个有限的数据集。这表明数据集的特性并不是至关重要的。

图 20.1 拟合随机数据。 用SGD训练的AlexNet架构在CIFAR-10数据集上的损失。当像素从与原始数据相同的高斯随机分布中采样时,模型仍然可以拟合(尽管速度较慢)。当标签被随机排列时,模型仍然可以拟合(尽管更慢)。改编自Zhang et al. , 2017a。
20.2.2 正则化 - Regularization
模型训练容易的另一个可能的解释是,一些正则化方法,比如L2正则化(权重衰减),可以使损失曲面更加平缓和凸起。然而,Zhang等人,2017a发现,拟合随机数据并不需要L2正则化或者Dropout。这并不能完全消除由于拟合算法的有限步长而产生的隐式正则化(第9.2节)。然而,这种效应随着学习率的增加而增强(方程式9.9),并且使用较大的学习率并不能使模型的拟合变得更容易。
20.2.3 随机训练算法 - Stochastic training algorithms
第6章论述了SGD算法在训练过程中有可能在“山谷”之间移动。然而,Keskar等人,2017的研究表明,多个模型(包括全连接网络和卷积网络)可以使用非常大的批次(5000-6000个图像)几乎完美地拟合许多数据集(包括CIFAR-100和MNIST)。这消除了大部分的随机性,但训练仍然成功。
图20.2显示了4个全连接模型拟合4000个MNIST-1D示例的训练结果,使用的是全批次(即非随机)梯度下降,标签是随机化的。没有明确的正则化,并且学习率被设置为一个小的常数值0.0025以减小隐式正则化。在这种情况下,从数据到标签的真实映射没有结构,训练是确定性的,也没有正则化,然而训练误差仍然会降到零。这表明这些损失函数可能真的没有局部最小值。

图 20.2 MNIST-1D 训练。 使用全批梯度下降、He初始化、无动量或正则化以及学习率0.0025,在4000个带有随机标签的MNIST-1D示例上拟合了四个全连接网络。每层1、2、3、4个神经网络分别有298、100、75和63个隐藏单元,以及15208、15210、15235和15139个参数。所有模型都训练成功,但是深层模型需要更少的迭代次数。
20.2.4 过参数化 - Overparameterization
过参数化几乎肯定是训练容易的一个重要因素。它意味着存在一大类退化解决方案,因此可能总有一种方向可以修改参数以减少损失。Sejnowski, 2020 表示“解决方案的退化性改变了问题的性质,从在一堆干草中找到一根针,变成了在一堆针中找到一根针。”
在实践中,网络经常过参数化一到两个数量级(图20.3)。然而,数据增强使得进行精确的陈述变得困难。增强可能使数据增加几个数量级,但这些是对现有示例的操作,而不是独立的新数据点。此外,图8.10显示,当与数据点数量相同或更少的参数时,神经网络有时可以很好地拟合训练数据。这可能是由于来自相同基础函数的训练示例的冗余性。几个理论上的收敛结果表明,在某些情况下,当网络过参数化时,随机梯度下降会收敛到全局最小值。例如,Du et al. , 2019b 表明,当具有足够隐藏单元的浅层全连接的ReLU网络使用最小二乘损失进行随机初始化时,SGD会收敛到全局最小值。类似地,Du et al. , 2019a 考虑了具有光滑和利普希茨激活函数的深层、残差和卷积网络。Zou et al. , 2020 分析了使用hinge损失函数对深层全连接网络进行梯度下降的收敛性。Allen-Zhu et al. , 2019 考虑了具有ReLU函数的深层网络。

图 20.3 过度参数化。 卷积神经网络在过度参数化情况下的 ImageNet 性能(作为数据集大小的倍数)。大多数模型的参数比训练样本多 10-100 倍。比较的模型包括 ResNet(He等,2016a,b)、DenseNet(Huang等,2017b)、Xception(Chollet,2017)、EfficientNet(Tan和Le,2019)、Inception(Szegedy等,2017)、ResNeXt(Xie等,2017)和AmoebaNet(Cubuk等,2019)。
如果神经网络足够过度参数化,可以记住任何固定大小的数据集,那么所有的驻点都会成为全局最小值(Livni等,2014;Nguyen和Hein,2017,2018)。其他研究结果表明,如果网络足够宽,局部最小值的损失高于全局最小值的情况很少见(参见Choromanska等,2015;Pascanu等,2014;Pennington和Bahri,2017)。Kawaguchi等,2019证明,当网络变得更深、更宽或两者兼而有之时,对于平方损失函数,局部最小值的损失越接近全局最小值。
这些理论结果很有意思,但通常对网络结构做出了不切实际的假设。例如,Du等,2019a表明,当网络的宽度
20.2.5 激活函数 - Activation functions
激活函数也被认为影响着训练的难度。相比于只在输入范围的一小部分变化的激活函数,ReLU(在一半的输入范围内变化)或 Leaky ReLU(在整个范围内变化)更容易进行拟合;例如,sigmoid 和 tanh 非线性函数(图 3.13a )在其尾部具有较浅的梯度;当激活函数接近常数时,训练梯度接近零,因此无法改善模型。
20.2.6 初始化 - Initialization
另一个可能的解释是 Xavier/He 初始化将参数设置为易于优化的值。当然,对于更深的网络,这种初始化是必要的,以避免梯度爆炸和梯度消失,因此从某种程度上讲,初始化对于训练的成功至关重要。然而,对于更浅的网络,权重的初始方差就不那么重要了。Liu et al. , 2023c 在1000个MNIST数据点上训练了一个具有每层200个隐藏单元的3层全连接网络。他们发现,随着方差从He提出的方差增加,需要更多的迭代次数来拟合训练数据,但这最终并没有妨碍拟合。因此,初始化对于解释为什么拟合神经网络容易并没有提供太多启示,尽管梯度爆炸/梯度消失揭示了在有限精度算术中进行训练困难的初始化。

图 20.4 初始化和拟合。 使用AdamW,在1000个MNIST示例上,训练了一个具有每层200个隐藏单元的三层全连接网络,使用one-hot目标和均方误差损失。使用更大的He初始化倍数进行拟合需要更长时间,但这并不改变结果。这可能只是反映了权重必须移动的额外距离。改编自Liu et al. , 2023c 。
20.2.7 网络深度 - Network depth
当网络的深度变得非常大时,神经网络的拟合变得更加困难,原因是梯度爆炸和梯度消失(见图 7.7)以及梯度分散(见图 11.3)。然而,这些问题可以说是实际数值问题。没有确凿的证据表明随着网络深度的增加,潜在的损失函数在凸性上有所不同。图 20.2 显示,对于随机标签和He初始化的MNIST数据集,更深的网络训练所需的迭代次数更少。然而,这可能是因为(i)更深的网络中的梯度更陡峭,或者(ii)He初始化使得更宽更浅的网络离最优参数更远。
Frankle & Carbin, 2019 表明,对于像VGG这样的小型网络,如果您(i)训练网络,(ii)修剪权重最小的权重,以及(iii)从相同的初始权重重新训练,您可以获得相同或更好的性能。如果重新初始化权重,则无法实现相同的效果。他们得出结论,原始的过度参数化网络包含了足够的小型可训练子网络来提供性能。他们将这种观点称为“彩票假设”,并将这些子网络称为“中奖券”。这表明有效的子网络数量可能在拟合中起重要作用。这个数量可能因网络深度的不同而有所变化,但对于这个观点的准确描述尚不清楚。
20.3 损失函数的性质 - Properties of loss functions
前一节讨论了影响神经网络训练难易程度的因素。参数数量(过度参数化的程度)和激活函数的选择都很重要。令人惊讶的是,数据集的选择、拟合算法的随机性以及正则化的使用似乎不是很重要。没有确凿的证据表明(对于固定的参数数量)网络的深度对结果有重要影响(除了由于梯度爆炸/消失/分散而导致的数值问题)。本节从不同的角度考虑损失函数的实证性质。大部分证据来自于全连接网络和卷积神经网络;对于Transformer网络的损失函数来说,了解得较少。
20.3.1 多个全局最小值 - Multiple global minima
我们预计深度网络的损失函数具有很多等价的全局最小值。在全连接网络中,每层的隐藏单元及其相关的权重可以进行排列而不改变输出。在卷积网络中,适当地排列通道和卷积核也不会改变输出。我们可以在ReLU函数之前乘以权重,之后除以一个正数而不改变输出。使用BatchNorm会引入另一组冗余,因为每个隐藏单元或通道的均值和方差会被重设。
上述修改对于每个输入都会产生相同的输出。然而,全局最小值只取决于训练数据点的输出。在过度参数化的网络中,还会有一系列在数据点上表现相同但在它们之间表现不同的解。所有这些也是全局最小值。
20.3.2 达到最小值的路径 - Route to the minimum
Goodfellow et al.,2015b认为初始参数和最终值之间有一条直线。他们证明了沿着这条直线的损失函数通常是单调递减的(有时在开始处有一个小的颠簸)。这种现象在几种不同类型的网络和激活函数上都被观察到(图20.5a)。

图 20.5 损失函数的线性切片。
- a)在MNIST上训练的一个二层全连接ReLU网络。在起始参数(δ=0)和训练参数(δ=1)之间的一条直线上的损失函数单调递减。
- b)然而,在MNIST上的一个二层全连接MaxOut网络中,在一个解(δ=0)和另一个解(δ=1)之间的直线上有一个损失的增加。改编自Goodfellow et al.,2015b。
当然,实际的优化轨迹并不是一条直线。然而,Li等人(2018b)发现它们确实位于低维子空间中。他们认为这是因为在损失函数空间中存在大而几乎是凸的区域,这些区域早期就捕捉到了轨迹,并将其引导到几个重要的方向。令人惊讶的是,Li等人(2018a)表明,即使优化被限制在一个随机的低维子空间中,网络仍然能够很好地训练(图20.6)。

图20.6 子空间训练。 在MNIST数据集上,训练了一个具有两个隐藏层,每个隐藏层有200个单位的全连接网络。参数使用标准方法进行初始化,然后限制在一个随机子空间内。当子空间的维度为750D(称为内在维度)时,性能达到无约束情况的90%。图源自Li等人(2018a)。
Li和Liang(2018)显示出,在网络宽度增加时,训练过程中参数的相对变化减小;对于更大的宽度,参数的初始值较小,相对变化的比例也较小,并且收敛所需的步骤更少。
20.3.3 最小值之间的联系 - Connections between minima
Goodfellow等人(2015b)通过直线连接两个独立发现的最小值来研究损失函数。他们发现在这两个最小值之间的损失有显著增加(图20.5b);好的最小值通常并没有线性联系。然而,Frankle等人(2020)表明,如果网络在最初训练时是相同的,并且之后通过使用不同的SGD噪声和数据增强来产生差异,这种增加就会消失。这表明解决方案在训练初期受到限制,并且某些最小值之间是线性相关的。 Draxler et al., 2018 发现在 CIFAR-10 数据集上存在着具有良好性能(尽管不同)的极小值。他们还展示了可以从一个极小值构建到另一个极小值的路径,在这个路径上损失函数保持较低。研究结果表明,存在一个单一连通的低损失流形(图 20.7 )。随着网络的宽度和深度增加,这一结论似乎越来越成立。Garipov et al., 2018 和 Fort & Jastrzębski, 2019 还提出了其他连接极小值的方法。

图 20.7 极小值之间的连接。 CIFAR-10 数据集上 DenseNet 的损失函数切片。参数
和 是两个独立发现的极小值。线性插值这些参数会显示一个能量障碍(虚线)。然而,在足够深和宽的网络中,可以找到一个低能量的曲线路径来连接两个极小值(青色线)。改编自 Draxler et al., 2018。
20.3.4 损失曲面的曲率 - Curvature of loss surface
随机高斯函数(其中点的联合分布协方差由它们之间距离的核函数给出)具有一个有趣的性质:在梯度为零的点上,函数向下弯曲的方向的比例会随着这些点的损失值降低而减小(参见 Bahri et al., 2020)。Dauphin et al., 2014 在神经网络损失函数中寻找鞍点,并发现损失和负特征值的数量之间存在相关性(图 20.8)。Baldi & Hornik, 1989 分析了浅层网络的误差曲面,并发现并不存在局部极小值,只有鞍点。这些结果表明,几乎没有或没有不良的局部极小值存在。

图 20.8 临界点 vs. 损失函数。
- a) 在随机高斯函数中,函数在梯度为零的点处向下弯曲的方向数量随函数的高度减少,因此所有的极小值都出现在较低的函数值处。
- b) Dauphin et al., 2014 在神经网络损失函数表面上找到了临界点(即梯度为零的点)。他们表明,负特征值(指向下方的方向)的比例随着损失值的减小而减少。这意味着所有的极小值(梯度为零且没有向下的方向)都具有较低的损失值。图中是根据Dauphin et al., 2014和Bahri et al., 2020的研究改编的。
Fort & Scherlis, 2019对神经网络损失函数表面上的随机点进行了曲率测量;他们发现,当权重的

图 20.9 Goldilocks区间。 随着参数的平方半径
相对于Xavier初始化的增加,Hessian矩阵在随机子空间Ds中特征值大于零的比例(度量正曲率/凸性)的变化。在双层全连接网络中应用ReLU函数并使用MNIST数据集。存在一个明显的正曲率区域被称为“Goldilocks区间”。图中是根据Fort & Scherlis, 2019的研究改编的。
20.4 决定泛化的因素 - Factors that determine generalization
前面两节讨论了网络是否能够成功训练以及神经网络损失函数的相关知识。本节将讨论影响网络泛化效果的因素。这与正则化(第9章)的讨论相辅相成,正则化明确旨在促进泛化。
20.4.1 训练算法 - Training algorithms
由于深度网络通常存在过多的参数,训练过程的细节决定了算法收敛到哪个极小值点。其中一些细节可以可靠地改善泛化效果。
LeCun等人,2012研究表明,随机梯度下降(SGD)比全批量梯度下降更好地泛化。有人认为SGD比Adam更好地泛化(例如,Wilson等人,2017;Keskar&Socher,2017),但最近的研究表明,当超参数搜索谨慎进行时,两者之间几乎没有差异(Choi等人,2019)。Keskar等人,2017的研究表明,在没有使用其他形式正则化的情况下,较小的批量大小可以更好地泛化深度网络。而且,众所周知,较大的学习率倾向于更好地泛化(例如,图9.5)。Jastrzębski等人,2018、Goyal等人,2018和He等人([2019])认为批量大小/学习率比例很重要。He等人,2019展示了这种比例与泛化程度之间的显著相关性,并为神经网络提供了泛化界限,这个界限与比例呈正相关(图20.10)。

图 20.10 批大小与学习率的比例。 在 CIFAR-10 数据库上,两个模型的泛化能力取决于批大小与学习率的比例。随着批大小增加,泛化能力减弱。随着学习率增加,泛化能力增强。这是基于He等人,2019年的研究结果。
这些观察结果与随机梯度下降(SGD)隐式地向损失函数中添加正则化项(第9.2节)的发现一致,其大小取决于学习率。这种正则化会改变参数的轨迹,使其收敛到能够良好泛化的损失函数的某一部分。
20.4.2 最小值的平坦性 - Flatness of minimum
自从Hochreiter和Schmidhuber,1997a以来,有人猜测损失函数中的平坦最小值比尖锐最小值更具有泛化能力(图20.11)。简单来说,如果最小值越平坦,那么对估计参数的小误差的影响就越小。这也可以从不同的理论观点进行解释。例如,最小描述长度理论认为,用更少的比特数表示的模型具有更好的泛化能力(Rissanen,1983)。对于宽的最小值,存储权重所需的精度较低,因此它们应该具有更好的泛化能力。

图 20.11 平坦 vs. 尖锐最小值。 预计平坦最小值具有更好的泛化能力。在平坦区域中,对估计参数的小误差或训练和测试损失函数之间的对齐性的小误差不会带来太大问题。这是基于Keskar等人,2017年的研究结果。
平坦度可以通过以下方式进行衡量:(i)训练损失相似的最小值周围的连通区域的大小(Hochreiter & Schmidhuber, 1997a);(ii)最小值周围的二阶曲率(Chaudhari et al., 2019);或者(iii)最小值附近的邻域内的最大损失值(Keskar et al., 2017)。
然而,需要注意的是,由于ReLU函数的非负同质性属性,估计的平坦度可能会受到网络微调微不足道的改变的影响(Dinh et al., 2017)。
尽管如此,Keskar et al., 2017改变了批量大小和学习率,并且显示平坦度与泛化有关。Izmailov et al., 2018对学习轨迹中的多个点的权重进行了平均。这既导致了最小值处测试和训练表面的平坦性,又改善了泛化性能。其他正则化技术也可以从这个角度来看待。例如,模型输出的平均(集成)也可以使测试损失曲面变得更平坦。Kleinberg et al., 2018表明,在训练过程中梯度方差较大有助于避免尖锐区域。这可能解释了为什么减小批量大小和添加噪声有助于泛化。
上述研究考虑了单个模型和训练集的平坦度。然而,尖锐度不是预测数据集之间的泛化的好指标;当CIFAR数据集中的标签被随机化(使泛化不可能)时,最小值的平坦度没有相应的降低(Neyshabur et al., 2017)。
20.4.3 架构 - Architecture
网络的架构决定了其归纳偏差,合理的模型选择可以极大地提高泛化能力。第10章介绍了卷积网络,其设计用于处理规则网格上的数据;它们隐含地假设输入的统计特性在整个输入上是相同的,因此它们在位置上共享参数。同样地,Transformer适用于对置换不变的数据进行建模,而图神经网络适用于表示在不规则图上的数据。将架构与数据的属性相匹配可以改善泛化能力,而不是使用通用的全连接架构(参见图10.8)。
20.4.4 权重的范数 - Norm of weights
第20.3.4节回顾了Fort&Scherlis,2019年的研究结果,发现当权重的

图20.12 超球面上的泛化。 在MNIST数据库上训练了一个具有两个隐藏层的全连接网络,每个隐藏层有200个单元(198,450个参数)。参数初始化为给定的
范数,然后限制保持这个范数并位于一个子空间中(垂直方向)。网络在Xavier初始化定义的半径 周围的一个小范围内具有很好的泛化性能(青色虚线)。改编自Fort&Scherlis,2019年。 这一研究发现被Liu等人,2023c用来解释“grokking”现象(Power等人,2022 ),即训练误差已经降为零的情况下,泛化性能在训练很多轮后突然出现显著改善(图20.13)。他们提出,当初始权重范数过大时,会出现“grokking”。这意味着模型在训练数据上拟合得很好,但数据点之间的模型变化很大。随着时间的推移,隐式或显式的正则化会降低权重的范数,直到它们达到合适的范围,泛化性能突然提升。

图20.13 Grokking。 当参数的
范数(半径)明显大于He初始化指定的范数时,训练时间更长(虚线),泛化时间更长(实线)。泛化滞后与权重的范数减小回到合适范围所花费的时间有关。改编自Liu等人,2023c。
20.4.5 过度参数化 - Overparameterization
我们之前看到,过度参数化程度越高,泛化性能越好。结合偏差/方差折衷曲线,就会出现双峰现象。对于这种改善,一个可能的解释是,在模型过度参数化时,网络在训练数据点之间有更大的灵活性,可以变得更加平滑。
进一步地,权重的范数也可以用来解释双峰现象。当参数的数量与数据点的数量相近时(模型为了精确拟合这些点而扭曲自身),权重的范数增加,导致泛化性能降低。但当网络变得更宽,权重数量增加时,这些权重的整体范数减小;由于权重是用He或Glorot初始化的,它们与初始值的变化非常小。
20.4.6 离开数据流形 - Leaving the data manifold
到目前为止,我们已经讨论了模型如何泛化到从与训练数据相同分布中抽取的新数据。这对于实验来说是一个合理的假设。然而,在现实世界中部署的系统可能会遇到意料之外的数据,这可能是由于噪声、数据统计上的变化或故意攻击造成的。当然,对于这种情况很难做出明确的陈述,但D'Amour et al. ,2020的研究表明,在被损坏的数据上训练的具有不同种子的相同模型的可变性可能是巨大且难以预测的。
Goodfellow et al. ,2015a的研究表明,深度学习模型容易受到对抗攻击。考虑对一个被网络正确分类为“狗”的图像进行扰动,使得正确类别的概率尽快下降直到类别翻转。如果这个图像现在被分类为飞机,你可能会期待扰动后的图像看起来像狗和飞机之间的交叉。然而,在实践中,扰动后的图像几乎无法与原始的狗图像区分开来(图20.14)。

图 20.14 对抗示例。在每种情况下,左边的图像被AlexNet正确分类。通过考虑网络输出相对于输入的梯度,可以找到一个小扰动(中间图像,放大了10倍供观察),当添加到原始图像(右边)时,使得网络错误地将其分类为鸵鸟。尽管对人类来说,原始图像和扰动后的图像几乎无法区分。改编自Szegedy et al. ,2014。
结论是存在一些接近但不在数据流形上的位置,这些位置被错误分类。这些被称为*对抗性样本。它们的存在令人惊讶;对网络输入做出如此微小的改变竟然会对输出产生如此巨大的变化?目前最好的解释是,对抗性样本并不是因为对训练数据流形外的数据缺乏鲁棒性,而是利用了训练分布中的一种信息源,该信息源的范数很小,对人类来说是无法察觉的(Ilyas et al.,2019)。
20.5 我们需要这么多参数吗? - Do we need so many parameters?
20.4节指出,在复杂数据集上取得最先进的性能几乎没有模型的参数数量明显小于训练数据点的例子。
然而,20.2节总结了一些证据表明,随着参数数量的增加,训练变得更容易。因此,目前尚不清楚较小模型是否由于某些基本属性无法表现得像较大模型那样好,还是训练算法无法为较小模型找到良好的解决方案。"修剪"和"蒸馏"是两种减小训练模型大小的方法。本节将研究这些方法是否能够产生保留过参数化模型性能的欠参数化模型。
20.5.1 剪枝 - Pruning
剪枝训练过的模型可以减小其大小,从而降低存储要求(图20.15)。最简单的方法是移除个别权重。这可以基于损失函数的二阶导数来完成,也可以根据权重的绝对值来进行操作。还有其他的方法可以剪枝隐藏单元、卷积网络中的通道,或者剪枝残差网络中的整个层。通常,在剪枝后会对网络进行微调,有时也需要多次迭代进行剪枝。

图20.15 剪枝神经网络。 目标是在不降低性能的情况下尽可能多地删除权重。这通常仅基于权重的大小来完成。剪枝后通常需要对网络进行微调。
- a) 示例全连接网络。
- b) 剪枝后的网络。
一般来说,模型越小,可以剪枝的权重比例就越大,而不会对性能造成显著影响。例如,当仅保留VGG网络权重的8%时,Han等人在ImageNet分类任务中仍然保持了良好的性能。这样可以大大减小模型的大小,但还不足以证明过度参数化是不必要的;VGG网络的参数量是ImageNet训练数据的100倍(不考虑数据增强)。
修剪是一种架构搜索的方法。在他们的彩票票研究中,Frankle和Carbin(2019)通过以下步骤实现:(i)训练网络,(ii)修剪具有最小幅度的权重,然后(iii)使用相同的初始权重重新训练剩余的网络。通过反复进行这个过程,他们在CIFAR-10数据库(60,000个示例)上将VGG-19网络(原始拥有1.38亿参数)的大小减小了98.5%,同时保持了良好的性能。对于ResNet-50(拥有2560万个参数),他们在ImageNet(拥有128万个示例)上减少了80%的参数,而不降低性能。这些演示非常令人印象深刻,但是(忽略数据增强)修剪后的这些网络仍然存在过多的参数。
20.5.2 知识蒸馏 - Knowledge distillation
通过训练一个较小的网络(学生网络)来复制一个较大的网络(教师网络)的性能,也可以减少参数。这被称为“知识蒸馏”,最早可以追溯到至少Buciluǎ et al.,2006。Hinton et al.,2015表明,输出类别之间的信息模式很重要,并训练一个较小的网络来近似较大网络的预softmax激活函数(图20.16)。

图20.16 知识蒸馏。
- a)一个用于图像分类的教师网络通常使用多类别交叉熵分类损失进行训练。
- b)一个较小的学生网络使用相同的损失进行训练,并且还使用蒸馏损失,鼓励预softmax激活函数与教师网络相同。
Zagoruyko & Komodakis, 2017 进一步提出将学生网络的激活空间图与教师网络在各个点上保持相似。他们利用这种“注意力传递”方法,在ImageNet分类任务上,用一个18层残差网络(1100万个参数)的性能近似一个34层残差网络(6300万个参数)。然而,这个模型仍然比训练样本的数量(100万张图像)要大。现代方法(如Chen et al., 2021a)可以改进这个结果,但蒸馏方法尚未提供令人信服的证据,证明欠参数化的模型可以表现良好。
20.5.3 讨论 - Discussion
目前的证据表明,对于当前使用的数据集的规模和复杂性而言,过度参数化是泛化所必需的。目前还没有展示出在复杂数据集上,使用的参数数量明显少于训练样本时能够达到最先进性能的示例。通过修剪或蒸馏训练过的网络来减小模型规模并没有改变这种情况。
此外,最近的理论表明,模型的 Lipschitz 常数和过度参数化之间存在权衡;Bubeck & Sellke, 2021证明,在
20.6 网络是否必须深层? - Do networks have to be deep?
第3章讨论了通用逼近定理,它表明浅层神经网络在具备足够的隐藏单元的情况下可以近似任何函数,达到任意精度。这引发了一个思考:网络是否必须是深层的呢?
首先,我们来考虑一下需要深度的证据。从历史上看,性能与深度之间存在明显的相关性。例如,在ImageNet基准测试中,网络深度的增加最初会提高性能,直到训练变得困难。后来,通过引入残差连接和批归一化(第11章),使得可以训练更深层的网络,并且性能也随之提升。截至撰写本文时,几乎所有最先进的应用,包括图像分类(如视觉变换器)、文本生成(如GPT3)和文本引导图像合成(如DALL E-2),都是基于拥有数十甚至上百层的深层网络。
尽管存在这种趋势,但也有人尝试使用更浅的网络。Zagoruyko & Komodakis, 2016构建了更浅但更宽的残差神经网络,并取得了与ResNet相似的性能。最近,Goyal et al., 2021构建了一个使用并行卷积通道的网络,只有12层,但却实现了与更深的网络相近的性能。此外,Veit et al., 2016表明,在残差网络中,性能主要由具有5-17层的较短路径驱动。
然而,综合证据表明,深度是至关重要的;即使是表现良好的图像分类的浅层网络也需要超过10层。然而,为什么深度如此重要目前还没有明确的解释。有三种可能的解释:(i)深层网络能够表示比浅层网络更复杂的功能;(ii)深层网络更容易训练;(iii)深层网络具有更好的归纳偏差。
20.6.1 建模函数的复杂性 - Complexity of modeled function
第4章显示,相同参数数量的深度网络比浅层网络具有更多的线性区域。我们还看到已经确定了一些所谓的“病态”函数,用浅层网络建模这些函数需要指数级的隐藏单元,而深层网络却不需要(例如,Eldan & Shamir, 2016;Telgarsky, 2016)。事实上,Liang & Srikant, 2016发现了一些更适合由深层网络建模的一般函数族。然而,Nye & Saxe, 2018发现这些函数中的一些在实践中并不容易被深层网络拟合。此外,很少有证据表明我们近似的真实世界函数具有这种“病态”属性。
20.6.2 训练的可行性 - Tractability of training
另一种解释是,具有适量隐藏单元的浅层网络可以支持最先进的性能,但是找到既能很好地拟合训练数据又能合理插值的好解决方案是困难的。
一种证明这一点的方法是将成功的深度网络提炼为更浅(但更宽)的学生模型,并观察是否能够保持性能。Urban等人(2017)将一个由16个卷积网络组成的集合模型用于CIFAR-10数据集的图像分类,将其提炼为不同深度的学生模型。他们发现,浅层网络无法复制更深的教师网络的性能,并且学生性能随着深度的增加而提升,但参数数量保持不变。
20.6.3 归纳偏差 - Inductive bias
目前大多数模型都依赖于卷积块或者Transformer。这些网络共享输入数据的局部区域的参数,并且通常会逐渐整合整个输入的信息。这些限制意味着这些网络能够表示的函数并不是通用的。因此,深度网络占据主导地位的一个解释是,这些限制具有良好的归纳偏好,并且很难强制浅层网络遵守这些限制。
多层卷积架构似乎本质上是有帮助的,即使没有经过训练。Ulyanov et al. , 2018证明了未经训练的CNN的结构可以作为先验用于低层任务,如去噪和超分辨率。Frankleet al. ,2021通过随机初始化核、固定其值,仅训练批量归一化的偏移和缩放因子,在图像分类上取得了良好的性能。Zhang et al. ,2017a显示,通过随机初始化的卷积滤波器提取的特征可以支持使用核模型进行后续的图像分类。
从Urban et al. ,2017的研究中,我们可以得到进一步的证据,证明卷积网络提供了有用的归纳偏好。他们试图将卷积网络蒸馏成浅层网络。他们发现,将网络蒸馏到卷积架构中的效果比蒸馏到全连接网络中的效果更好。这表明卷积架构具有一些固有的优势。由于浅层网络无法轻松复制卷积网络的顺序局部处理,这证明了深度确实很重要。
20.7 总结 - Summary
本章提出了深度学习的成功是令人惊讶的观点。我们讨论了优化高维损失函数的挑战,并认为超参数化和激活函数的选择是使深度网络能够解决这些问题的两个最重要因素。我们注意到,在训练过程中,参数会在一个低维子空间中移动,最终收敛到了一组相互关联的全局最小值中,并且并不存在明显的局部最小值。
神经网络的泛化能力也会随着超参数化的增加而提高,尽管其他因素如最小值的平坦度和架构的归纳偏好也很重要。我们观察到大量的参数和多层网络对于良好的泛化是必要的,但我们尚不清楚其中的原因。
仍然有许多问题没有得到解答。我们目前没有任何理论可以准确预测训练和泛化的成功或失败。我们还不知道深度网络学习的限制,也不确定是否存在更高效的模型。我们也不知道在同一模型中是否存在能够更好泛化的参数。深度学习的研究仍然主要依靠经验验证。这些经验证明的结果无疑令人印象深刻,但我们对深度学习机制的理解仍然有限。
20.8 问题 - Problems
问题 20.1 考虑 ImageNet 图像分类任务,输入图像包含
问题 20.2 考虑图 20.1。为什么你认为当像素被随机排列时,算法适应数据的速度比标签被随机排列时快?
问题 20.3 图 20.2 显示了一个非随机拟合过程,固定学习率成功拟合随机数据。这是否意味着损失函数没有局部最小值?这是否意味着函数是凸函数?请证明你的回答,并给出一个反例,如果你认为其中任何一个说法是错误的。
[译]第21章 深度学习与伦理 - Deep learning and ethics《理解深度学习 - Understanding Deep Learning》

本文是基于Simon J.D. Prince 的新书《Understanding Deep Learning》翻译而来;
- 原书介绍、原书(英文)下载、译文进展 以及 译文内容请戳 ↓↓↓
- [译]《理解深度学习 - Understanding Deep Learning 》 - 目录&前言 - ATA (atatech.org)
↓↓↓ 以下正文↓↓↓
- 第21章 深度学习与伦理 - Deep learning and ethics
- 21.1 价值对齐 - Value alignment
- 21.2 故意滥用 - Intentional misuse
- 21.3 其他社会、伦理和专业问题 - Other social, ethical, and professional issues
- 21.4 案例研究 - Case study
- 21.5 科学价值自由理念 - The value-free ideal of science
- 21.6 负责任的人工智能研究是一个集体行动问题 - Responsible AI research as a collective action problem
- 21.7 未来的方向 Ways forward
- 21.8 总结 - Summary
- 问题
第21章 深度学习与伦理 - Deep learning and ethics
本章由Travis LaCroix和Simon J.D.Prince撰写。
人工智能正处于可以改变社会的关键时刻,可能带来好处,也可能带来坏处。这些技术在社会福利方面有着巨大的潜力(Taddeo和Floridi,2018年;Tomašev等,2020年),包括在医疗保健(Rajpurkar等,2022年)和应对气候变化(Rolnick等,2023年)方面发挥重要作用。然而,它们也有被滥用和造成意外伤害的潜力。这就出现了人工智能伦理领域。
深度学习的现代时代始于2012年的AlexNet,但对人工智能伦理的持续关注并没有立即出现。事实上,关于机器学习公平性的研讨会在2013年的NeurIPS上因为缺乏材料而被拒绝。直到2016年,人工智能伦理才有了它的“AlexNet”时刻,即ProPublica关于COMPAS再犯预测模型偏见的揭露(Angwin等,2016年)和Cathy O'Neil的书籍《数学摧毁之武器》(O'Neil,2016年)。自那时以来,人们对此的兴趣不断增加;自2018年成立以来,提交给"公平性、问责性和透明度"(FAccT)会议的论文数量增加了近十倍。
与此同时,许多组织针对负责任的人工智能提出了政策建议。Jobin et al.,2019发现了84份包含人工智能伦理原则的文件,其中88%是在2016年之后发布的。这种泛滥的非立法政策协议依赖于自愿的、非约束性的合作,对其有效性产生了质疑(McNamara et al.,2018;Hagendorff,2020;LaCroix & Mohseni,2022)。简而言之,人工智能伦理还处于初级阶段,道德考虑往往是被动的而非主动的。
本章探讨了人工智能系统设计和使用中可能产生的潜在危害。其中包括算法偏见、缺乏解释性、数据隐私侵犯、军事化、欺诈和环境问题。我们的目标不是提供如何更加道德的建议,而是在哲学、政治学和广泛的社会科学领域引发思想和讨论的关键领域。
21.1 价值对齐 - Value alignment
在机器学习模型中,损失函数是我们真正目标的代理,而两者之间的不一致被称为“外部对齐问题”。如果代理函数不够准确,系统就会找到“漏洞”来最小化损失函数,但却无法达到预期的目标。举个例子,考虑训练一个强化学习代理来下棋。如果代理只被奖励捕获棋子,那可能会导致很多平局,而不是我们期望的行为(赢得比赛)。而内部对齐问题则是要确保人工智能系统的行为不会偏离预期目标,即使损失函数已经很好地指定。如果学习算法无法找到全局最小值,或者训练数据不够具有代表性,那么训练就有可能收敛到与真正目标不一致的解决方案,从而导致不良行为。
Gabriel(2020)将价值对齐问题分为技术和规范两个组成部分。技术组成部分关注的是如何将价值观准确地编码到模型中,以确保模型能够可靠地实现其应有的功能。例如,避免奖励作弊和进行安全的探索等具体问题可能有纯技术的解决方案(Amodei等人,2016年)。相反,规范组成部分关注的是首先确定正确的价值观。考虑到不同文化和社会对事物的重视程度各不相同,可能不存在唯一的答案。重要的是所编码的价值观能够代表每个人,而不仅仅是社会中某些文化主导的群体。
将价值对齐看作是一个结构性问题,它在人类委托者将任务交给人工智能代理人时会出现(LaCroix,2022年)。这类似于经济学中的委托代理问题(Laffont和Martimort,2002年),在任何期望一个方面为另一个方面最大化利益的关系中,都存在着竞争性的激励因素。在人工智能的背景下,利益冲突可能出现在两种情况下:一是目标设定不正确,二是委托者与代理人之间存在信息不对称(图21.1)。

图 21.1 值对齐问题的结构描述。 问题来源于:
- a)目标不一致(例如,偏见)或
- b)(人类)委托方和(人工)代理方之间的信息不对称(例如,缺乏可解释性)。改编自LaCroix, 2023。
通过这种结构性观点,我们可以更好地理解AI伦理学中的许多问题。接下来的章节将讨论偏见和公平性,以及人工道德代理(两者都涉及目标的具体化)和透明度和可解释性(两者都与信息不对称相关)。
21.1.1 偏见和公平性 - Bias and fairness
从纯科学的角度来看,偏见是指相对某种规范的统计偏差。在AI中,当这种偏差取决于不合法的因素,从而影响输出结果时,它可能是有害的。例如,性别与工作表现无关,所以以性别作为招聘候选人的依据是不合法的。同样地,种族与犯罪无关,所以以种族作为累犯预测的特征也是不合法的。
AI模型中存在的偏见可能通过多种方式引入(Fazelpour&Danks,2021):
问题规范: 选择模型的目标需要对我们认为重要的价值进行判断,这可能会导致偏见的产生(Fazelpour&Danks,2021)。如果我们未能成功将这些选择具体化,并且问题的规范未能准确捕捉到我们的预期目标,进一步的偏见可能会出现(Mitchell et al。,2021)。
数据: 在数据集不具有代表性或不完整的情况下,算法的偏见可能会产生(Danks&London,2017)。例如,PULSE人脸超分辨率算法(Menon et al。,2020)是在主要由白人名人照片组成的数据库上进行训练的。当应用于一张低分辨率的巴拉克·奥巴马肖像时,它生成了一张白人男性的照片(Vincent,2020)。
即使是完整且具有代表性的数据集,如果生成训练数据的社会对边缘化群体存在结构性偏见,也可能会导致偏见的产生(Mayson,2018)。例如,在美国,黑人个体比白人更容易受到监管和监禁。因此,用于训练再犯预测模型的历史数据已经带有对黑人社区的偏见。
建模和验证: 选择一种数学定义来衡量模型的公平性是需要进行价值判断的。存在着不同但同样直观的定义,它们在逻辑上是不一致的。这表明需要从纯数学的公平概念转向对算法是否在实践中促进公正进行更实质性的评估。
部署: 已部署的算法可能与社会中的其他算法、结构或机构互动,形成复杂的反馈循环,巩固现有的偏见。例如,像GPT3这样的大型语言模型是基于网络数据进行训练的。然而,当GPT3的输出在线发布时,未来模型的训练数据会下降。这可能加剧偏见并产生新的社会危害。
不公平可能会因交叉性 的考虑而加剧;社会类别可以结合在一起,形成重叠和相互依赖的压迫系统。例如,一个有色人种的酷儿女性所经历的歧视不仅仅是作为酷儿、性别或种族的歧视之和。在人工智能领域,研究表明,主要在较浅肤色的脸上训练的人脸分析算法在较深肤色的脸上表现不佳。然而,它们在考虑皮肤颜色和性别等特征组合时的表现甚至比单独考虑这些特征时更差。
当然,我们可以采取措施确保数据的多样性、代表性和完整性。但是,如果生成训练数据的社会结构对边缘化社群存在偏见,即使是完全准确的数据集也会产生偏见。鉴于可能存在算法偏见以及训练数据集中的代表性不足,我们还需要考虑这些系统输出的失败率如何可能加剧对已经处于边缘化社群的歧视。由此产生的模型可能会将权力和压迫的体系固化和巩固,包括资本主义和阶级主义;性别歧视、厌女和父权制;殖民主义和帝国主义;种族主义和白人至上主义;残障歧视;以及异性恋和二元规范性。对于偏见的观点要保持对权力动态的敏感性,需要考虑数据中编码的历史不公平和劳动条件。
为了避免这种情况,我们必须积极确保我们的算法是公平的。一种天真的方法是通过无视公平性来实现,即从输入特征中删除“受保护属性”(例如种族、性别)。不幸的是,这种方法是无效的,剩下的特征仍然可能带有关于受保护属性的信息。更实际的方法首先为公平性定义了一个数学标准。例如,在二元分类中,使用“分离”度量需要预测结果
| 数据收集 | 预处理 | 训练 | 后处理 |
|---|---|---|---|
| <li/>识别缺少的样本或变量并收集数据 | <li/>修改标签<br/><li/>修改输入数据<br/><li/>修改输入/输出对 | <li/>对抗训练<br/><li/>为公平性进行规范化<br/><li/>限制为公平 | <li/>改变阈值<br/><li/>权衡准确性 |
图 21.2 偏见缓解。已经提出了各种方法来弥补训练过程中的偏见,从数据收集到已经训练好的模型的后处理。详见 Barocas et al.,2023 和 Mehrabi et al.,2022。
另一个复杂因素是,除非我们能确定社区成员身份,否则我们无法判断算法是否对某个社区存在不公平,并采取相应措施来解决。目前对算法偏见和公平性的大部分研究都集中在训练数据中可能存在的可观察特征上(例如性别)。然而,边缘化社区的特征往往是不可观察的,这使得偏见的减少变得更加困难。例如,性取向(Tomasev等,2021)、残疾状况、神经类型、阶级和宗教。而当训练数据中的可观察特征被移除以防止模型利用它们时,也会出现类似的问题。
21.1.2 人工道德代理 - Artificial moral agency
在许多决策空间中,所做的行动并不涉及道义问题。例如,在下一步棋的选择中并没有明显的道德后果。然而,在其他领域,行动可能具有道义重量。例如,自动驾驶车辆的决策制定(Awad等,2018;Evans等,2020)、致命自主武器系统(Arkin,2008a,b)以及用于儿童保育、老年护理和医疗保健的专业服务机器人(An-derson&Anderson,2008;Sharkey&Sharkey,2012)。随着这些系统的自主性越来越高,它们可能需要独立于人类的输入做出道德决策。
这引出了"人工道德智能"的概念。人工道德智能是指能够作出道德判断的自主人工智能系统。道德代理可以根据复杂程度进行分类(Moor, 2006):
-
伦理影响代理 是指其行为对道德产生影响的代理。因此,几乎任何部署在社会中的技术都可能被视为伦理影响代理。
-
隐式伦理代理 是指具有一些内置安全特性的伦理影响代理。
-
显式伦理代理 可以根据一般的道德原则或道德行为规则来进行情境性的遵循。
-
完全伦理代理 是指具有信念、欲望、意图、自由意志和对自己行为的意识的代理。
机器伦理学领域致力于寻找创建人工道德代理的方法。这些方法可以分为"自上而下"、"自下而上"或"混合"(Allen et al., 2005)三类。自上而下(理论驱动)的方法直接根据某些道德理论实现并层级排列具体规则,以引导道德行为。阿西莫夫的"机器人三大定律"就是这种方法的一个简单例子。
在自下而上(学习驱动)的方法中,模型通过从数据中学习道德规律来进行操作,而无需进行明确的编程([Wallach et al.,2008])。
例如,[Noothigattu等,2018]设计了一个基于投票的系统,用于道德决策,该系统利用从人类在道德困境中收集到的偏好数据来学习社会偏好;然后,该系统对结果进行总结和汇总,以作出“道德”决策。混合方法结合了自上而下和自下而上的方法。
一些研究人员对人工道德代理的概念提出了质疑,并认为确保安全并不需要道德代理([van Wynsberghe&Robbins,2019])。最近关于人工道德代理的调查请参见[Cervantes等,2019],关于技术方法的人工道德代理的最新调查请参见[Tolmeijer等,2020]。
21.1.3 透明性和不透明性 - Transparency and opacity
如果一个复杂的计算系统的所有细节都是已知的,那么该系统就是“透明”的。如果人类可以理解系统如何做出决策,那么该系统就是“可解释的”。在缺乏透明性或可解释性的情况下,用户和AI系统之间存在信息不对称,这会导致难以确保价值的一致性。
Creel , 2020 将透明度划分为几个不同的层次。功能透明度指的是对系统算法功能的了解(即将输入转化为输出的逻辑规则)。本书中的方法都在这个层次上进行了详细描述。结构透明度意味着了解程序执行算法的方式。当使用高级编程语言编写的命令被转化为机器码执行时,这一过程可能会变得模糊不清。最后,运行透明度要求了解程序在特定实例中的执行情况。对于深度网络来说,这包括对硬件、输入数据、训练数据以及它们之间的相互影响的了解。这些信息都无法通过仔细检查代码来获得。
例如,GPT3在功能上是透明的;其架构在Brownet al. , 2020中有详细描述。然而,它在结构上并不透明,因为我们无法获取其代码;它在运行上也不透明,因为我们无法获取学习到的参数、硬件或训练数据。而后续版本的GPT4则完全不透明。这个商业产品的工作细节是未知的。
21.1.4 可解释性和可理解性 - Explainability and interpretability
尽管系统是透明的,也不意味着我们能够理解决策的制定过程以及所依据的信息。深度网络可能包含数十亿个参数,仅凭检查是无法理解其工作原理的。然而,在某些司法管辖区中,公众可能有权要求解释决策的依据。欧盟《通用数据保护条例》第22条建议,在决策完全基于自动化过程的情况下,所有数据主体都应该有权“获取决策的解释”。^[1]^
^[1]^ 关于《通用数据保护条例》是否实际上要求此类权利存在,存在争议(参见Wachter et al. , 2017)。
由于这些困难,解释性人工智能这一子领域应运而生。其中一个相对成功的领域是提供局部解释。虽然我们无法解释整个系统,但有时我们可以描述特定输入是如何被分类的。例如,局部可解释的模型无关解释(LIME)Ribeiro et al. , 2016会在附近的输入上对模型输出进行采样,并利用这些样本构建一个更为简单的模型(图21.3)。这为我们提供了对分类决策的洞察,即使原始模型既不透明也无法解释。

图 21.3 LIME。深度网络的输出函数非常复杂;在高维空间中,很难知道为什么做出某个决策,或者如何修改输入以改变决策,除非能够访问模型。
- a)考虑试图理解为什么白色十字处的
很低。LIME在附近的点上测试网络,看它是否将这些点视为 (青色点)或 (灰色点)。它根据与兴趣点的距离对这些点进行加权(权重由圆圈的大小表示)。 - b)使用加权的点来训练一个更简单的模型(在这里是逻辑回归 - 一个通过sigmoid函数的线性函数)。
- c)在白色十字附近,这个近似值接近于:
- d)原始函数。即使我们无法访问原始模型,但是我们可以从这个近似模型的参数推断出,如果增加
或减少 , 将增加,输出类别将发生变化。改编自Prince, 2022。
目前尚不清楚是否能够构建出用户甚至创建者完全可理解的复杂决策系统。关于系统的可解释性、可理解性或可解释性的含义,目前还存在争议([Erasmus et al. , 2021]),对这些概念尚无明确的定义。更多信息请参见[Molnar , 2022]。
21.2 故意滥用 - Intentional misuse
前一节中的问题源于目标规范不明确和信息不对称。然而,即使一个系统正常运行,它可能导致不道德行为或者被故意滥用。本节重点阐述了一些由于人工智能系统滥用而引起的具体道德问题。
21.2.1 人脸识别和分析 - Face recognition and analysis
人脸识别技术存在着特别高的滥用风险。威权主义国家可以利用这些技术来识别和压制抗议者,从而危及自由言论和抗议权利的民主理念。[Smith & Miller, 2022]认为,自由民主的价值观(如安全、隐私、自主权和问责制)与这些技术的潜在应用场景(如边境安全,刑事调查和执法,国家安全以及个人数据的商业化)之间存在不匹配。因此,一些研究人员、活动家和政策制定者对这项技术是否应存在提出了质疑([Barrett, 2020])。
此外,这些技术经常不能如它们所声称的那样工作(Raji等人,2022)。例如,尽管某个概念验证试验报告显示在可接受的参数范围内人脸识别的成功率为零,纽约大都会交通管理局仍然继续推进并扩大了它的人脸识别使用(Berger,2019)。同样,人脸分析工具经常夸大其能力(Raji和Fried,2020),怀疑地声称能够推测个体的性取向(Leuner,2019)、情绪(Stark和Hoey,2021)、就业能力(Fetscherin等人,2020)或犯罪倾向(Wu和Zhang,2016)。Stark和Hutson(2022)强调计算机视觉系统已经使相貌学和头脑学等“毫无科学依据、种族主义和不信任的伪科学领域”重新兴起。
21.2.2 军事化和政治干预 - Militarization and political interference
政府有着出于国家安全和国家建设的名义资助人工智能研究的利益。这可能导致国家之间的军备竞赛,带来“高额的投资、缺乏透明度、相互的怀疑和恐惧,以及对首次部署的意图的感知”(Sisson等人,2020)。
致命的自主武器系统因为容易想象而受到了广泛关注,实际上许多这样的系统正在开发中(Heikkilä,2022)。然而,人工智能还促进了网络攻击和虚假信息宣传(即通过不准确或误导性信息共享来欺骗)。人工智能系统可以创建高度逼真的虚假内容,并且通常以大规模、针对特定受众的方式传播(Akers等,2018)(Bontridder&Poullet,2021)。
Kosinski等,2013 提出,敏感变量,如性取向、种族、宗教和政治观点、人格特质、智力、幸福感、对成瘾物质的使用、父母分居、年龄和性别,仅通过社交媒体上的“赞”就能预测得出。利用这些信息,可以用于操纵目的,例如改变投票行为。
21.2.3 欺诈 - Fraud
不幸的是,人工智能是自动化欺诈活动的有用工具,例如发送大量电子邮件或短信来欺骗人们透露敏感信息或发送资金。生成式人工智能可以欺骗人们认为他们正在与合法实体互动,或生成欺骗或误导人的假文件。此外,人工智能还可以增加网络攻击的复杂性,例如生成更具说服力的钓鱼邮件或适应目标组织的防御。
这凸显了对机器学习系统透明性的呼吁存在的负面影响:这些系统越是开放和透明,就越容易受到安全风险的威胁或者被恶意行为利用。例如,生成式语言模型(如ChatGPT)已被用于编写可能被用于间谍活动、勒索软件和其他恶意软件的软件和电子邮件。
将计算机行为拟人化的倾向,特别是将意义投射到符号串上,被称为“ELIZA效应”。这在与复杂的聊天机器人互动时会产生一种虚假的安全感,使人们更容易受到基于文本的欺诈,如浪漫骗局或商业电子邮件篡改计划的影响。[Véliz,2023]强调了一些聊天机器人中使用表情符号的本质上是操纵性的,利用了对情感图像的本能反应。
21.2.4 数据隐私 - Data privacy
现代深度学习方法依赖于庞大的众包数据集,其中可能包含敏感或个人信息。即使删除了敏感信息,辅助知识和冗余编码也可以用于重新识别数据集的匿名性。事实上,这在1997年发生在马萨诸塞州州长William Weld身上。在一个保险集团发布了已经剥离了明显个人信息(如患者姓名和地址)的健康记录后,一名有抱负的研究生通过与公开的选民名册交叉参照,成功“重新识别”出属于William Weld州长的记录。
因此,在将深度学习技术应用于医疗保健和金融等高风险领域时,隐私优先的设计对于确保个人信息的安全非常重要。可以使用差分隐私和语义安全(同态加密或安全多方计算)方法来确保模型训练过程中的数据安全(参见[Mireshghallah et al.,2020];[Boulemtafes et al.,2020])。
21.3 其他社会、伦理和专业问题 - Other social, ethical, and professional issues
上一节已经指出了人工智能可能被有意滥用的领域。本节将介绍人工智能广泛应用可能产生的其他潜在副作用。
21.3.1 知识产权 - Intellectual property
知识产权(IP)可以被定义为非实体财产,是原创思维的产物([Moore & Himma,2022])。实际上,许多人工智能模型都是在受版权保护的材料上进行训练的。因此,这些模型的部署可能带来法律和伦理风险,并触犯知识产权([Henderson et al.,2023])。
有时候,这些问题是明确的。当语言模型接收到受版权保护的材料片段时,它们的输出可能会直接包含受版权保护的文字,类似的问题也适用于扩散模型在图像生成方面(Hendersonet al. , 2023 ; Carlini et al. , 2022 , 2023 )。即使培训行为符合“合理使用”的标准,但在某些情况下,这可能会侵犯内容创作者的道德权益(Weidinger et al. , 2022 )。更微妙的是,生成模型(第12, 14-18 章)提出了关于人工智能和知识产权的新问题。机器学习模型的输出(如艺术、音乐、代码、文本)是否可以受到版权或专利的保护?在道德上是否可以接受或合法地对模型进行微调,以重现某个艺术家的风格?知识产权法是一个突出显示出现有立法并未考虑到机器学习模型的领域。尽管政府和法院可能在不久的将来设立先例,但这些问题在撰写本文时仍未确定。
21.3.2 自动化偏见和道德弱化 - Automation bias and moral deskilling
随着社会对人工智能系统的依赖程度越来越高,自动化偏见的风险也在增加(即认为模型的输出是正确的,因为它们是“客观的”)。这使得人们普遍认为量化方法比定性方法更好。然而,正如我们将在21.5节中看到的那样,所谓的客观努力很少是毫无价值的。
劳动社会学中的"技能消解"概念指的是在自动化的背景下技能的冗余和贬值(Braverman, 1974)。例如,将记忆等认知技能依赖于技术可能会导致我们记忆能力的下降。类似地,人工智能在涉及道德决策的自动化中的应用可能会导致我们的道德能力下降(Vallor, 2015)。例如,在战争背景下,武器系统的自动化可能会对战争受害者产生非人性化的影响([Asaro, 2012];[Heyns, 2017])。同样,在老年人、儿童或医疗保健环境中使用护理机器人可能会减少我们相互关心的能力([Vallor, 2011])。
21.3.3 环境影响 - Environmental impact
训练深度网络需要大量的计算能力,因此消耗了大量的能源。Strubell等人(2019, 2020)估计,训练一个拥有2.13亿个参数的Transformer模型会排放约284吨的
^[2]^ 作为一个基准,平均每个人每年负责大约5吨的
排放,而来自主要石油生产国的个人负责的排放量是这个数量的三倍。详见https://ourworldindata.org/co2-emissions。
21.3.4 就业和社会 - Employment and society
技术创新的历史就是工作被取代的历史。2018年,麦肯锡全球研究所估计到2030年,人工智能可能使经济产出增加约13万亿美元,主要是通过自动化替代劳动力实现的(Bughin等人,2018)。麦肯锡全球研究所的另一项研究表明,在2016年至2030年间,全球劳动力中高达30%的人(10亿至8亿人)可能因为人工智能而失去工作(Manyika等人,2017;Manyika和Sneader,2018)。
然而,预测本身就是困难的,虽然AI的自动化可能导致短期内的失业,但“技术失业”的概念被描述为“暂时的不适应阶段”(Keynes,2010)。这是因为财富的增长可以通过创造对产品和服务的需求来抵消生产力的增长。此外,新技术还可以创造新的就业岗位。
即使自动化在长期内不会导致总体就业的净损失,但在短期内可能仍需要新的社会计划。因此,无论对于人工智能引发失业的可能性持乐观态度(Brynjolfsson & McAfee,2016;Danaher,2019),中立态度(Metcalf等,2016;Calo,2018;Frey,2019)还是悲观态度(Frey & Osborne,2017),都清楚地表明社会将发生重大变化。
21.3.5 权力集中 - Concentration of power
随着深度网络规模的增加,训练这些模型所需的数据和计算能力也相应增加。在这方面,小公司和创业公司可能无法与大型、成熟的科技公司竞争。这可能导致权力和财富逐渐集中在少数几家公司手中,形成一个恶性循环。最近的一项研究发现,大型科技公司和“精英”大学在重要的人工智能会议上发表的论文数量与中低级别大学之间存在越来越大的差距( Ahmed & Wahed , 2016 )。在许多观点中,这种财富和权力的集中与社会的公正分配是不相符的( Rawls , 1971 )。
这引发了呼吁通过使每个人都能够创建这样的系统来实现人工智能的民主化( Li , 2018 ; Knight, 2018 ; Kratsios , 2019 ; Riedl , 2020 )。这个过程需要通过开源和开放科学,使深度学习技术更加广泛地可用和易于使用,以便更多人从中受益。这降低了进入门槛,增加了对人工智能的获取,同时降低了成本,确保了模型的准确性,并增加了参与度和包容性( Ahmed et al. , 2020 )。
21.4 案例研究 - Case study
现在我们来讲述一个案例研究,涉及到本章讨论的许多问题。2018年,媒体报道了一个备受争议的面部分析模型,被戏称为"gaydar AI"([Wang & Kosinski,2018年]),标题充满了轰动效应,比如AI可以判断你是否是同性恋:通过一张照片惊人准确地预测性取向([Ahmed,2017年]);一种可怕的AI可以以91%的准确率判断一个人是否是同性恋([Matsakis,2017年]);以及人工智能系统可以判断你是否是同性恋([Fernandez,2017年])。
这项工作存在一些问题。首先,训练数据集极度偏颇且不具代表性,主要由高加索人的图像组成。其次,考虑到性别和性取向的多变性,模型的建模和验证也具有问题。第三,这个模型最明显的应用是针对在同性恋被定罪的国家迫害LGBTQ+个体。第四,就透明度、可解释性以及价值认同而言,这个"gaydar"模型似乎是通过造型、表达和生活方式中的模式来捕捉虚假相关性,而不是作者声称的面部结构([Agüera yArcas等,2018年])。第五,就数据隐私而言,在从约会网站上"公开"的照片和性取向标签中收集数据的伦理问题引发了一些疑问。最后,就科学传播而言,研究人员以一种肯定会吸引眼球的方式传达了他们的研究结果:甚至论文的标题都夸大了模型的能力:深度神经网络可以从面部判断性取向(它们实际上不能)。
显而易见,一个用于确定性取向的面部分析模型对LGBTQ+社群毫无益处。如果它要造福社会,最重要的问题是一个特定的研究、实验、模型、应用或技术是否符合相关社群的利益。
21.5 科学价值自由理念 - The value-free ideal of science
这一章列举了一些人工智能系统目标与人类价值观无意识地或者通过误用而发生偏离的方式。我们在这里争论科学家并不是中立的行动者;他们的价值观不可避免地影响他们的工作。
或许这让人感到惊讶。人们普遍相信科学是客观的,或者应该是客观的。这被科学价值自由理念所规定。许多人会认为机器学习是客观的,因为算法只是数学。然而,与算法偏见类似,有四个阶段会使人工智能从业者的价值观影响他们的工作:
-
选择研究问题。
-
收集与研究问题相关的证据。
-
将科学假设作为问题的答案接受。
-
应用科学研究的结果。
可以说,在这四个阶段中,价值观在第一阶段和最后一阶段发挥了重要作用是毫无争议的。研究问题的最初选择和随后的应用选择受科学家、机构和资助机构的兴趣影响。然而,科学的价值自由理念规定在其中介的科学过程中最小化道德、个人、社会、政治和文化价值的影响。这个想法基于价值中立论,它认为科学家可以在第二阶段和第三阶段中注意到这些价值判断而不做出这些价值判断。
然而,无论是有意为之还是无意之间,价值观都已渗透到机器学习研究中。其中大部分价值观可被归为认识论(例如性能、泛化、在先前工作基础上构建、效率、新颖性)。然而,决定这些价值观的集合本身就是一个充满价值取向的决策;很少有论文明确讨论社会需求,甚至更少的论文讨论潜在的负面影响(Birhane et al. , 2022b)。科学哲学家们对于科学价值观是否可以实现或者是否可取提出了质疑。例如,Longino(1990 , 1996)认为这些认识论价值观并非纯粹的认识论。而Kitcher([2011a, b])则认为科学家们通常并不关心真理本身,相反,他们追求与其目标和兴趣相关的真理。
机器学习依赖归纳推理,因此容易受到归纳风险的影响。模型仅在训练数据点上受到约束,并且由于维度灾难,这只占据了输入空间的很小一部分;无论我们用多少数据来训练模型,输出总可能是错误的。因此,选择接受或拒绝模型的预测需要进行价值判断:即若我们在接受时犯错所带来的风险较低,则选择接受;若我们在拒绝时犯错所带来的风险较低,则选择拒绝。
因此,使用归纳推理意味着机器学习模型具有深刻的价值取向(Johnson, 2022)。事实上,如果它们没有这种价值取向,它们将毫无用处:正是因为它们具有价值取向,它们才有用。因此,接受算法在现实世界中用于排名、排序、过滤、推荐、分类、标记、预测等方面,就意味着这些过程将产生实际的影响。随着机器学习系统的商业化和应用越来越广泛,它们越来越深入地影响着我们关心的事物。
这些观点对于那些认为算法在某种程度上比人类决策者更客观(因此应该在我们认为客观性很重要的领域取代人类决策者)的研究人员具有重要意义。
21.6 负责任的人工智能研究是一个集体行动问题 - Responsible AI research as a collective action problem
推卸责任很容易。阅读本章的学生和专业人员可能会认为他们的工作与现实世界相距甚远,或者只是一个更大机器的一个小部分,他们的行动不会产生影响。然而,这是一个错误。研究人员经常可以选择他们投入时间的项目、他们工作的公司或机构、他们追求的知识、他们交往的社交和知识圈子,以及他们沟通的方式。
无论涉及什么内容,做正确的事情通常会遇到社会困境;最好的结果取决于合作,尽管对于个人而言,合作并不一定符合个人利益:负责任的人工智能研究是一个集体行动问题。
21.6.1 科学传播 - Scientific communication
一个积极的步骤是负责任地进行沟通。在许多社交网络中,错误信息比真相传播得更快、更持久(LaCroix等,2021; Ceylan等,2023)。因此,重要的是不夸大机器学习系统的能力(参见上面的案例研究),避免误导性的拟人化。还要注意机器学习技术被错误应用的可能性。例如,类似相面术和颅相学的伪科学实践在人工智能领域出现了意想不到的复兴(Stark&Hutson, 2022)。
21.6.2 多样性和异质性 - Diversity and heterogeneity
第二个积极的步骤是鼓励多样性。当社会群体是同质的(主要由相似成员组成)或同质化的(由倾向于与相似他人交往的成员组成)时,主导群体往往会重复和稳定其惯例(O'Connor&Bruner,2019)。减轻压迫系统的一种方式是确保考虑到多样的观点。这可以通过机构层面的公平、多样性、包容性和可访问性倡议,研究层面的参与性和基于社区的方法,以及个体层面对社会、政治和道德问题的增强认识来实现。
立场认识论理论(Harding, 1986)认为,知识是社会定位的(即依赖于一个人在社会中的社会地位)。技术圈的同质性可能导致有偏见的技术(Noble, 2018; Eubanks, 2018; Benjamin, 2019; Broussard, 2023)。缺乏多样性意味着创造这些技术的个体的观点会渗入数据集、算法和代码中,成为默认的视角。Broussard, 2023认为,因为很多技术是由健全的、白人、异性恋、美国男性开发的,所以这些技术被优化为适合健全的、白人、异性恋、美国男性,他们的观点被视为现状。确保技术造福历史上被边缘化的社群需要研究人员了解这些社群的需求、愿望和观点(Birhane等,2022a)。设计公正和参与性和基于社区的人工智能研究方法认为,受技术影响的社群应该积极参与其设计(Constanza-Chock, 2020)。
21.7 未来的方向 Ways forward
不可否认,人工智能将对社会产生彻底的改变,无论是积极的还是消极的。然而,对于由人工智能推动的未来乌托邦社会的乐观愿景,应该持谨慎态度,进行健康的反思。人工智能所宣传的许多好处只在特定情境下,对特定社会群体有益。例如,Green, 2019指出,使用人工智能增强警察问责制度和替代监禁的项目,以及使用人工智能通过预测性警务增加安全性的项目,都被宣传为“以人工智能造福社会”。给这个标签贴上价值判断是没有根据的;一个社区的利益可能对另一个社区来说是伤害。
在考虑新兴技术对社会的益处时,有必要思考这些益处是否能够公平地分配。通常认为,技术最先进的解决方案就是最好的,这就是所谓的“技术至上主义”(Broussard, 2018)。然而,许多社会问题源于根本的社会问题,并不需要技术解决方案。
本章涉及到了一些共同的主题,我们希望向读者强调四个关键点:
-
机器学习研究无法回避伦理问题。以往,研究人员可以在受控的实验室环境中专注于他们工作的基础方面。然而,由于商业化人工智能的巨大经济激励以及学术工作受到工业界资助的程度,即使是理论研究也可能对社会产生影响,因此研究人员必须关注他们工作的社会和伦理层面。
-
即使是纯粹的技术决策也可能带有价值导向。有一种普遍看法认为人工智能基本上只是数学,因此是“客观的”,伦理是无关紧要的。但是,当我们考虑到人工智能系统的创建和部署时,这种假设是不正确的。
-
我们应该对人工智能工作所处的结构进行质疑。许多关于人工智能伦理的研究着重于具体情境,而不是质疑人工智能将被部署的更大社会结构。例如,确保算法公平性引起了很大兴趣,但在现有的社会和政治结构中,可能无法完全体现公平、正义或公正的概念。因此,技术本质上是政治性的。
-
社会和伦理问题不一定需要技术解决方案。许多围绕人工智能技术的潜在伦理问题主要是社会和结构性的,因此仅靠技术创新无法解决这些问题;如果科学家们想要通过新技术实现积极变革,他们必须采取政治和道德立场。
这对于一般的科学家来说意味着什么?也许有以下重要事项:有必要反思自己工作的道德和社会层面。这可能需要积极与那些可能受到新技术影响最大的社群进行互动,以培养研究者和社群之间的关系,并赋予这些社群权力。同样,这可能还涉及到拓展自己学科范畴之外的文献。对于哲学问题,斯坦福哲学百科全书是一个非常有价值的资源。跨学科会议在这方面也非常有用。在公平、问责和透明度会议(FAccT)和人工智能与社会会议(AIES)上都发表了领先的研究成果。
21.8 总结 - Summary
本章考虑了深度学习和人工智能的伦理影响。价值对齐问题是确保人工智能系统目标与人类目标一致的任务。通过这个视角,我们可以看待偏见、可解释性、人工道德代理和其他相关主题。人工智能可能会被有意滥用,本章详细介绍了一些可能发生的方式。人工智能的进展还对知识产权法和气候变化等领域产生了进一步的影响。
伦理人工智能是一个集体行动问题,本章最后呼吁科学家考虑他们工作的道德和伦理影响。并不是每个个体计算机科学家都能控制每个伦理问题。然而,这并不意味着研究人员没有责任考虑他们所创建的系统被滥用的可能性,并在可能的情况下加以缓解。
问题
问题 21.1 提出了一个观点,即AI的价值对齐问题最常见的定义是“确保AI系统的价值与人类的价值相一致的问题”。讨论这个问题陈述的不明确之处。讨论资源: LaCroix , 2023 。
问题 21.2 Goodhart定律指出,“当一个衡量指标成为目标时,它就不再是一个好的衡量指标。”考虑到损失函数只是我们真正目标的一个代理,思考一下如何重新制定这个定律,以适用于人工智能的价值对齐。
Problem 21.3 假设一所大学利用过去学生的数据构建模型,用于预测“学生成功”,以支持政策和实践的明智变革。请思考偏见如何影响该模型的开发和部署的四个阶段。
Problem 21.4 我们可以将功能透明度、结构透明度和运行透明度看作是相互独立的。请举一个例子,说明某种透明度的提高可能不会导致另一种透明度的相应提高。
Problem 21.5 如果一位计算机科学家撰写了一篇关于人工智能的研究论文或向公共代码库提交了代码,您认为他们是否应该对其工作未来的滥用负责?
Problem 21.6 您认为人工智能的军事化在多大程度上是不可避免的?
Problem 21.7 鉴于第 21.2 节中强调的人工智能可能被滥用的情况,对深度学习研究的开源文化进行正反两方面的论述。
问题21.8 有人认为个人数据对于拥有者来说是一种权力的来源。探讨个人数据对于应用深度学习的公司的价值,并思考个人隐私损失是集体经历还是个体经历的论点。
问题21.9 生成式人工智能对创意产业有哪些影响?你认为知识产权法应该如何修改以适应这一新发展?
问题21.10 一个良好的预测必须(i)具体到足以判断其错误的时机,(ii)考虑可能存在的认知偏见,以及(iii)允许理性地更新信念。思考一下最近媒体上关于未来人工智能的任何主张,并讨论它是否满足这些标准。讨论资源:Tetlock & Gardner, 2016。
问题21.11 一些批评人士认为,呼吁民主化人工智能过于侧重于"参与性"方面,这可能增加集体感知、推理和行动中的错误风险,导致不良的道德结果。思考以下每个问题:应该民主化哪些人工智能的方面?为什么应该民主化人工智能?如何民主化人工智能?
问题21.12 2023年3月,未来生命研究所发表了一封名为"暂停巨型人工智能实验"的公开信,呼吁所有人工智能实验室立即暂停训练比GPT-4更强大的人工智能系统至少六个月。讨论作者撰写此信的动机、公众反应以及这样的暂停对于人工智能伦理问题的影响。将这一事件与将人工智能伦理问题视为集体行动问题的观点联系起来。讨论资源:Gebru et al., 2023。
问题 21.13 讨论21.7节中四个观点的优势。你是否同意这些观点?
图1.11 图像插值。每一行中,左侧和右侧的图像是真实的,中间的三个图像表示由生成模型创建的插值序列。支持这些插值的生成模型已经学会了所有图像都可以由一组潜在变量生成。通过找到这些变量的两个真实图像的值,插值它们的值,然后使用这些中间变量创建新的图像,我们可以生成既视觉上合理又混合了两个原始图像特征的中间结果。改编自
图1.12 从标题“时代广场上的一个滑板上的泰迪熊”生成的多个图像。由DALL·E-2生成(
图 16.11 模拟密度。